2014-03-14 109 views
-1

救我有這樣軌道4如何通過select_tag

<%= 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

爲什麼使用'@survey.each do'? – asiniy

回答

1

更改名稱屬性的視圖您選擇的標籤讓每個調查ID:

<%= select_tag "survey[#{s.id}][status]" .... 

這將建立一個PARAMS結構是這樣的:

params = {:survey => {123 => {:status => 0}, 21 => {:status => 1}, 36 => {:status => 0}}} 

其中123,21 & 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結構像

params = {:survey => {123 => {:status => 0, :name => "foo"}, 21 => {:status => 1, :name => "bar"}, 36 => {:status => 0, :name => "baz"}}} 

,你仍然有整齊地包含在一個單一的哈希調查的所有屬性。另一方面,調用諸如「s」之類的變量並不是一個好習慣,因爲它不會告訴讀者(將來可能包括你)它是什麼。 Rails慣例是在其類之後命名活動記錄對象,因此您會說

@surveys.each do |survey| 
    ..etc 
+0

Thx你的回答,但也許應該改變「調查[#{s.id}] [name]」中的調查[#{s.id}] [name]「,然後它就起作用了^^,你的解釋確實有用對我來說!!!! thx非常多 – Steven

+0

哦,它不適用於單引號? (花了我一段時間在你的評論中發現兩者之間的差異)。這很奇怪。我不知道爲什麼會這樣,他們都是字符串。 –

+0

我不知道爲什麼,但是在單引號中不能加載#{s.id},在雙引號中可以加載 – Steven