我有这样的观点
<%= form_tag member_survey_path(@survey), :method => :post do %>
<% @survey.each do |s| %>
<td><%= s.title %></td>
<td><%= select_tag 'survey[][status]', options_for_select([['AAA',"0"],['DDD',"1"],['BBB',"2"],['CCC',"3"]]) %> </td>
<% end %>
<%= submit_tag 'submit', :class => "btn new_btn" %>
<% end %>
我不知道如何在控制器中做,以及如何通过survey.id
答案 0 :(得分:1)
更改select标记的name属性,使其具有每个调查的ID:
<%= select_tag "survey[#{s.id}][status]" ....
这将建立一个这样的参数结构:
params = {:survey => {123 => {:status => 0}, 21 => {:status => 1}, 36 => {:status => 0}}}
其中123,21&amp; 36是调查对象的ID。然后,在您的控制器中,您可以执行此操作:
params[:survey].each do |survey_id, attributes|
if survey = Survey.find_by_id(survey_id)
survey.update_attributes(attributes)
end
end
如果您想在该表单中的调查中进行其他任何可编辑的操作,则很容易做到:例如,如果您还要编辑名称,则可以添加
<td><%= text_field_tag "survey[#{s.id}][name]", s.name %></td>
这将构成像
这样的参数结构 params = {:survey => {123 => {:status => 0, :name => "foo"}, 21 => {:status => 1, :name => "bar"}, 36 => {:status => 0, :name => "baz"}}}
并且您仍然可以将调查的所有属性整齐地包含在一个哈希中。
顺便说一句,将变量称为“s”这样的事情并不好,因为它不会告诉读者(未来可能包括你)它是什么。 Rails约定是在类之后命名活动记录对象,所以你会说
@surveys.each do |survey|
..etc