通过哈希或数组更新

时间:2016-04-16 21:03:19

标签: ruby-on-rails ruby forms hash

我想更新期间模型中的subject_id字段。期间循环将位于表单内。因此,当我提交表单时,传递的参数将作为哈希值出现,其中键为Period.id,值为subject_id 。那么,我该如何更新呢。

Show.html.erb 我有



<%= form_tag update_institutes_path, method: : put do %>
  <% @period.each do |cc | %>
    <%= cc.subject.name %>
    <%= collection_select('id', cc.id, Subject.all, : id, : name, selected: cc.id, prompt: true) %>
    <% end %>
  <%= submit_tag %>
<% end %>
&#13;
&#13;
&#13;

SHOW行动我有

&#13;
&#13;
def show
  @period = Period.all
end
&#13;
&#13;
&#13;

更新操作中,我有

&#13;
&#13;
def update
  @period = params[:id]
  keys, values = @period.map { |k,v| [k.to_i, v.to_i] }.transpose
  values.each { |f| Period.all.update_all(:subject_id => f) }
end
&#13;
&#13;
&#13;

其中@period = params[:id]给出一个像

这样的参数
  #Parameters: {"utf8"=>"✓", "authenticity_token"=>"8SNaUIQ6ZwjYOqBX07QYyVJsbuvYTL2TotSqIg0yj98nYXq5XqJ5XRHqlCvl1aw0lLg9vowyDOl3Hhm+hYDaOA==", "id"=>{"1"=>"3", "4"=>"2"}, "commit"=>"Save changes"}
  1. 其中哈希中的1和4是period_id
  2. 哈希中的
  3. 3和2是subject_id。
  4. 然后我将哈希转换为键和值

    1. 其中键是period_id
    2. 值为subject_id。
    3. 然后我循环使用值并更新Period。

      正在更新,但问题只是最后一个值2被更新,其中每个subject_id变为2,我不会发生3(第一个值)发生的情况,只有最后一个值是更新。我只想敲打两天来解决这个问题。我是铁杆新手,请善待。谢谢你的回答。

1 个答案:

答案 0 :(得分:0)

你说你有一个哈希,密钥是period_id,值是subject_id。假设您的哈希名称为period_and_subjects,您希望这样做:

Period.update(period_and_subjects.keys, period_and_subject.values)

因此,如果您的period_and_subjects哈希看起来像{1 => 2, 4 => 5},它会更新ID为1的句点,其主题的ID为2,句点的ID为4,主题的ID为5。

查看update的{​​{3}}。