在rails 3应用程序中,我有一个包含20多个问题和答案的表单。使用具有两个级别的映射数组填充页面... q [0} .blah是问题数组,q [1] .yada是答案数组。当单击单选按钮时,我使用jQuery提交每个更改的答案。目前我有以下内容。
视图:
<%= form_tag update_result_answers_path, :remote => true do %>
<% @answers.each do |q| %>
<%= q[0].question %>
<% [ 1, 2, 3, 4, 5 ].each do |f| %>
<%= radio_button_tag q[1].id, f, f == q[1].score, :class => 'submittable' %>
<% end %>
<% end %>
<% end %>
控制器:(这是错误的)
def update_result
@answers = Answer.find params[:id] # THIS LINE PRODUCES THE ERROR BELOW
@answers.update_attributes params[:score]
end
我使用答案ID为每个单选按钮命名。所以,...在我运行rails服务器的控制台窗口中,我会找回包含答案ID和每个问题答案的参数:
Parameters: {"22"=>"1", "6"=>"1", "7"=>"1", "12"=>"3", "13"=>"1", "8"=>"2", "14"=>"1", "15"=>"3", "authenticity_token"=>"q2jW71ndaw4vkbTP9qt0Tuo+sOUhdF/Kf4xTf6Up0AY=", "utf8"=>"✓", "16"=>"4", "17"=>"1", "1"=>"1", "18"=>"1", "2"=>"5", "3"=>"4", "19"=>"4", "20"=>"5", "21"=>"1", "4"=>"2", "5"=>"2"}
然后是错误:
ActiveRecord::RecordNotFound (Couldn't find Answer without an ID)
如何修改控制器代码以获取答案ID和答案值?隐藏的领域可能吗?
感谢您的帮助。
更新:根据您的要求,迈克。输出......
._ ._ ._ ._ ._ ._ ._ ._ ._ ._ ._ ._ ._。_。。。。。。。。_某些-._ ._ ._ ._。 _ ._ ._非常
._ Question._ ._ ._ Never._ ._很少._ ._ times._ ._ ._经常._ ._。经常
1_ blah blah._ ._ ._ O ._ ._ ._ ._ O ._ ._ ._ ._ O ._ ._ ._ ._ O ._ ._ ._ ._ O < / p>
2_ blah blah._ ._ ._ O ._ ._ ._ ._ O ._ ._ ._ ._ O ._ ._ ._ ._ O ._ ._ ._ ._ O < / p>
3_ blah blah._ ._ ._ O ._ ._ ._ ._ O ._ ._ ._ ._ O ._ ._ ._ ._ O ._ ._ ._ ._ O < / p>
继续
O是点击时点击的单选按钮。
更新2:每个请求,路由文件 -
resources :answers do
collection do
post :update_result
end
end
答案 0 :(得分:0)
update_result_answers_path
params[:id]
并不会神奇地出现,除非您的路线定义它并且您的表单正在操作的对象包含它。您使用的是普通form_tag
而不是form_for _object_
,因此表单不会直接在对象上运行。
您可能需要通过jQuery传入一个“id”参数来执行您在示例中列出的内容。