簡體   English   中英

通過數組更新

[英]Update via array

我在更新時遇到了麻煩。 當我提交表單時,該參數為我提供了一個哈希值,如{"1"=>"1", "4"=>"1"} 我只想更新值。 所以,我把 Keys 和 Values keys, values = @period.map { |k,v| [k.to_i, v.to_i] }.transpose分開了keys, values = @period.map { |k,v| [k.to_i, v.to_i] }.transpose keys, values = @period.map { |k,v| [k.to_i, v.to_i] }.transpose其中@period = {"1"=>"1", "4"=>"1"} 我得到像[1,4]這樣的值。 那么,我如何通過這個數組更新它。 當我使用 update_attributes 時只使用最后一個值(4)。 如何通過數組更新字段。 我是 Rails 的新手,所以要冷靜。

您對此解決方案的方法不遵循 Rails 約定,這就是您發現它很困難的原因。 以 Rails 方式做事會讓你的生活更輕松。

TLDR :您應該使用嵌套屬性並圍繞父對象@institution 構建表單。 有關如何實現這一點,請參閱 Rails 指南的這一部分: http : //guides.rubyonrails.org/form_helpers.html#building-complex-forms

更詳細...

您似乎有一個 Period 模型、一個 Subject 模型和一個 Institution 模型。 句號似乎屬於科目,也可能屬於機構。 如果我錯了,請糾正我。

您似乎在以下方面違反了 Rails 約定:

  1. 當您應該使用編輯方法和視圖時,您正在使用顯示方法和視圖。

  2. 當您可以使用 form_for 時,您正在使用 form_tag。

  3. 您正在直接從您的視圖中調用模型。

  4. 您沒有在處理父項的多個子記錄時使用嵌套屬性。

總之,您應該改變您的方法來執行以下操作:

  1. 讓stitutions_controller#update 方法負責批量更新您的期間數據。

  2. 將此添加到您的機構模型中:

     accepts_nested_attributes_for :periods
  3. 在您的機構控制器中,將期間的參數添加到機構的參數中,例如:

     params.require(:institution).permit( :name, # whatever else is there now... periods_attributes: [ :id, :subject_id, :institution_id ] )
  4. 將您的機構/_form 更新為如下所示:

     <%= form_for @institution do |f| %> <%= f.text_field :name %> <%= fields_for :periods do |p| %> <%= p.hidden_field :institution_id %> <%= p.collection_select :subject_id, @subjects, :id, :name, prompt: true %> <% end %> <%= f.submit %> <% end %>

    看看它有多優雅? 每個屬性都被正確命名,當您檢查提交時的傳入參數時,無需猜測鍵和值的含義。

  5. 更新您的stitutions_controller#edit 方法以執行以下操作:

     def edit @institution = Institution.includes(:periods).find(params[:id]) @subjects = @institution.subjects.all # assumes subjects belong to institution end
  6. 您的機構控制器#更新可能不需要任何更新,應該如下所示:

     def update @institution = Institution.find(params[:id]) if @institution.update_attributes(institution_params) flash[:success] = "Saved!" redirect_to @institution # or wherever you want to go else @subjects = @institution.subjects.all render :edit end end

試試這個。 HTH

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM