【问题标题】:Iteration over array of params in view迭代视图中的参数数组
【发布时间】:2017-03-06 05:57:52
【问题描述】:

我有一个 Sinatra 应用程序,我希望它显示成对参数之间的交互列表。现在我只允许 2 个选择,但我想要一个可以允许任意数量的解决方案。

此代码在终端中返回所需的交互,但我不知道如何在页面上显示它。有什么建议吗?

<p><%= array = params.values.permutation(2).to_a.each {|a| a.sort! }.uniq! %></p>
<div><%= array.each do |a| p Aed.interactions(a[0], a[1]).humanize end %>

【问题讨论】:

    标签: ruby sinatra erb


    【解决方案1】:

    渲染一个 html 页面,注入一个变量的值与向控制台写入一些东西是不同的。将 p(print/put/printf) 语句放在视图文件中不会做任何事情,也将其放在您的路由/控制器中会将其写入控制台,而不是浏览器。

    如果你运行下面的代码并访问http://locahost:4567/hello/15/male/kensington(主机和端口可能不同)

    get '/hello/:age/:sex/:location' do 
     "Hello. I am a #{params[:sex]}. I am #{params[:age]} years old and I live in #{params[:location]}"
    end
    

    你会在浏览器窗口中看到类似的文本,

    你好。我是男性。我今年 15 岁,住在肯辛顿

    如果您有视图文件并希望将一些变量传递给该视图,

    get '/hello/:age/:sex/:location' do 
      @age = params[:age]
      @sex = params[:sex]
      @loc = params[:location]
      erb :hello 
    end
    

    示例hello.erb(假设您有这样的文件),

    <p>Below table holds some info about King Matt the First</p>
    
    <table>
      <tr>
        <td>Age</td>
        <td>Sex</td>
        <td>Location</td>
      </tr>
      <tr>
        <td><%= @age %></td>
        <td><%= @sex %></td>
        <td><%= @loc %></td>
      </tr>
    </table>
    

    当您访问 localhost:4567/11/male/warsaw 时

    您将看到包含该内容的页面。

    当涉及到您的代码时,请使用 combination(2) 而不是 permutation(2).to_a {|a| a.sort! }.uniq!

    2.3.1 :029 > a = [1,2,3].permutation(2).to_a.each {|a| a.sort! }.uniq!
     => [[1, 2], [1, 3], [2, 3]] 
    2.3.1 :030 > b = [1,2,3].combination(2).to_a
     => [[1, 2], [1, 3], [2, 3]] 
    

    最好不要使用数组作为变量名,但如果你坚持使用,你的代码应该写成在浏览器窗口上打印一些东西..

    <div>
    <% array.each do |a| %> 
    <%= Aed.interactions(a[0], a[1]).humanize %> 
    <% end %>
    </div>
    

    http://apidock.com/ruby/ERB

    您还应该考虑在路由/控制器块内迁移数据库查询。

    【讨论】:

    • 感谢您提供有关使用组合而不是排列的提示。我知道打印到控制台和渲染 html 之间的区别。原来我把 = 放在了错误的地方。我将它放在每个语句的开头而不是该语句的块中。至于数据库调用,这个特定应用程序没有数据库。感谢您的帮助。
    猜你喜欢
    • 2020-10-24
    • 2019-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-18
    • 2017-02-11
    • 2020-02-06
    相关资源
    最近更新 更多