2

我正在创建一个调查,并且有一堆:movie_1通过命名的列:movie_5,我想循环遍历这些列以在我的表单中创建一个表格。最好的方法是什么?

到目前为止,我已经开始如下,但无法弄清楚如何格式化循环。

调查.rb模型

attr_accessible :movie_1, :movie_2, :movie_3, :movie_4, :movie_5

MOVIES = ["Rocky", "Wayne's World", "The Godfather", "Alien", "Toy Story"]

new.html.erb调查表

<%= form_for @survey do |f|
  <table>
    <tr>
      <th>Movie Name</th>
      <th>Rating</th>
    </r>
    <% 5.times.each do |n| %>
      <tr>
        <th><%= f.label Survey::MOVIES[n] %></th> # how can I loop through the MOVIES array?
        <th><%= f.text_field :movie_n %></th> # how can I loop through the different columns?
      </tr>
    <% end %>
  </table>
<% end %>
4

3 回答 3

5

在这种情况下,您可能需要考虑制作另一个模型MovieSurvey然后使用嵌套表单来显示所有电影/更新它们。

这里有一些关于嵌套表单的好Railscast 。

于 2013-04-05T05:08:05.850 回答
2

您可以遍历该列并仅使用与命名模式匹配的那些。

例子

Survey.columns.select{|c| c if c =~ /movie_[0-9]/}.each { |movie_column| puts movie_column }

但更好的解决方案是设置正确的关系,就像mind.blank描述的那样。

于 2013-04-05T05:14:07.307 回答
1

这应该有效:

<% Survey::MOVIES.each_with_index do |movie, index| %>
  <tr>
    <th><%= f.label movie %></th>
    <th><%= f.text_field "movie_#{index+1}".to_sym %></th>
  </tr>
<% end %>

movie_1然而,mind.blank 是正确的:在您的调查模型中包含,movie_2等字段是糟糕的设计。拥有属于调查的电影模型会更有意义。

于 2013-04-05T05:08:46.210 回答