我正在尝试更新一个只在未选中时将属性设置更新为false的表单。它们目前默认为true(这是我想要的)但如果我点击一个属性,它会将所有属性更新为false。我只想更新一个特别是假的,以及许多其他行。我不确定如何检查说“如果选择了一个选定的属性,更新那个属性,否则如果选择了另一个属性则更新另一个属性,并立即更新所有收集/检查的字段。”
我在路线中定义了一个集合:
resources :evidences do
put :score, on: :collection
end
这是我的控制者:
class EvidencesController < ApplicationController
def score
EvidenceScore.update_all({quality: false, alignment: false}, {id: params[:evidence_score_ids]} )
redirect_to observation_domain_indicator_evidences_path
end
end
这是我的表格:
<%= form_tag(score_observation_domain_indicator_evidences_path, :method => 'put') do %>>
<tr>
<th><h4> Evidence </h4></th>
<th><h4> Quality </h4></th>
<th><h4> Alignment</h4></th>
<th><h4> Quality(Your Score) </h4></th>
<th><h4> Alignment(Your Score) </h4></th>
</tr>
<% @indicator.evidence_scores.each do |evidence_score| %>
<tr>
<td><%= evidence_score.description %></td>
<td><%= check_box_tag("evidence_score_ids[]", evidence_score.id) %></td>
<td><%= check_box_tag("evidence_score_ids[]", evidence_score.id) %></td>
<td><%= evidence_score.quality ? "Yes" : "No" %></td>
<td><%= evidence_score.alignment ? "Yes" : "No" %></td>
</tr>
<% end %>
</table>
<%= submit_tag "Submit Scores" %>
<% end %>
当您点击下面的图片链接到第二行时,如果我只选择其中一个复选框,则两者都会更新。如果我选择一个复选框,我正试图只有一个更新的能力。通过单击复选框并提交它,它应呈现“否”
这是一张正在发生的事情的图片。
https://www.dropbox.com/s/bhf1el4xdsrcox3/Screenshot%202014-03-02%2002.03.40.png
答案 0 :(得分:1)
我在这里看到了几个错误。
您的观点无法区分您需要增强check_box_tag每个复选框具有不同名称的两种情况
例如
check_box_tag('quality', true, false)
check_box_tag('alignment', true, false)
然后在你的控制器中你应该以不同的方式处理params
if params[:quality] == true
update_quality_attribute
end
if params[:alingment] == true
update_alignment_attribute
end
PS:我不完全了解你对update_all
的所作所为。如果您尝试更新所有记录,则应省略最后一个哈希。如果您只想更新一条记录,那么
update_attribute
或update_column
on: :member
路线