【问题标题】:update via Hash or Array通过哈希或数组更新
【发布时间】:2016-08-08 18:12:55
【问题描述】:

我想更新 周期模型 中的 subject_id 字段。周期循环将在表单内的位置。所以,当我提交表单时,传递的参数以哈希的形式出现,其中 Key 是 Period.id,Value 是 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 %>

展示操作我有

def show
  @period = Period.all
end

更新操作我有

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

其中@period = params[:id] 给出类似的参数

  #Parameters: {"utf8"=>"✓", "authenticity_token"=>"8SNaUIQ6ZwjYOqBX07QYyVJsbuvYTL2TotSqIg0yj98nYXq5XqJ5XRHqlCvl1aw0lLg9vowyDOl3Hhm+hYDaOA==", "id"=>{"1"=>"3", "4"=>"2"}, "commit"=>"Save changes"}
  1. 哈希中的 1 和 4 是 period_id
  2. 散列中的3和2是subject_id。

然后我将哈希转换为键和值

  1. 其中键是 period_id
  2. values 是 subject_id。

然后我循环这些值并更新周期。

它正在更新,但问题只是最后一个值2被更新,每个subject_id都变成2,我不知道3(第一个值)会发生什么,只有最后一个值被更新。 我只是用两天的时间来解决这个问题。我是rails新手,请善待。感谢您提前回答。

【问题讨论】:

    标签: ruby-on-rails ruby forms hash


    【解决方案1】:

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

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

    因此,如果您的 period_and_subjects 哈希看起来像 {1 =&gt; 2, 4 =&gt; 5},它将用 id 2 的主题更新 id 为 1 的期间,用 id 为 5 的主题更新 id 为 4 的期间。

    查看docs 中的update

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-05
      • 2014-05-11
      • 2017-05-11
      • 2019-05-01
      • 2016-04-02
      • 2014-03-13
      相关资源
      最近更新 更多