我在我的第一个Ruby on Rails应用程序中使用嵌套模型,现在我遇到了一个问题。我有一个调查模型has_many:问题反过来属于:调查和模型问题has_many:答案。我的答案模型然后属于:问题。
现在我想更新一个布尔属性:猜测我的:答案控制器。为此,我创建了一个新动作:quiz_guess,如下所示:
def quiz_guess
Answer.update(params[:id], guess: false)
puts("Guess saved")
redirect_to(:action => 'show', :id => @survey.next, :survey_id => @survey.id)
end
我的观点如下:
<%= form_tag quiz_guess_questions_path, :method => :put do %>
<% for question in @survey.questions do %>
<li><%= h question.content %></li>
<% for answer in question.answers do %>
<li><%= h answer.content %>
<%= form_for :guess do |f| %>
<%= f.check_box(:guess, :method => :put) %>
<% end %>
</li>
<% end %>
<% end %>
<% end %>
显然我已经阅读了documentation以及此blog post,但我不明白如何在我的控制器和视图中实现它。
使用此代码,我无法更新正确的:guess属性,而是更新另一个(使用不同的:id)。谁能解释一下我做错了什么?
答案 0 :(得分:0)
我最终看到了这个Railscast,其中Ryan Bates展示了如何使用fields_for更新多个属性。这是我的新观点:
<%= form_tag quiz_guess_questions_path, :method => :put do %>
<% for question in @survey.questions do %>
<li><%= question.content %></li>
<% for answer in question.answers do %>
<li>
<%= fields_for "answers[]", answer do |f| %>
<%= answer.content %>
<%= f.check_box :guess %>
<% end %>
</li>
<% end %>
<% end %>
<%= submit_tag "Guess" %>
<% end %>
和我的新控制器:
def quiz_guess
Answer.update(params[:answers].keys, params[:answers].values)
flash[:notice] = "Guess saved successfully."
redirect_to questions_url
end