对视图中的参数数组进行迭代

时间:2017-03-06 05:57:52

标签: ruby sinatra erb

我有一个Sinatra应用程序,我想显示一对params之间的交互列表。现在我只允许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 %>

1 个答案:

答案 0 :(得分:2)

渲染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

您会看到包含该内容的网页。

enter image description here

说到代码时,请使用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

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

相关问题