提交复选框表单时仅更新某些属性

时间:2014-03-02 10:23:55

标签: ruby-on-rails ruby forms checkbox updating

我正在尝试更新一个只在未选中时将属性设置更新为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

1 个答案:

答案 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_attributeupdate_column
  • 将您的路线更改为on: :member路线