[英]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 約定:
當您應該使用編輯方法和視圖時,您正在使用顯示方法和視圖。
當您可以使用 form_for 時,您正在使用 form_tag。
您正在直接從您的視圖中調用模型。
您沒有在處理父項的多個子記錄時使用嵌套屬性。
總之,您應該改變您的方法來執行以下操作:
讓stitutions_controller#update 方法負責批量更新您的期間數據。
將此添加到您的機構模型中:
accepts_nested_attributes_for :periods
在您的機構控制器中,將期間的參數添加到機構的參數中,例如:
params.require(:institution).permit( :name, # whatever else is there now... periods_attributes: [ :id, :subject_id, :institution_id ] )
將您的機構/_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 %>
看看它有多優雅? 每個屬性都被正確命名,當您檢查提交時的傳入參數時,無需猜測鍵和值的含義。
更新您的stitutions_controller#edit 方法以執行以下操作:
def edit @institution = Institution.includes(:periods).find(params[:id]) @subjects = @institution.subjects.all # assumes subjects belong to institution end
您的機構控制器#更新可能不需要任何更新,應該如下所示:
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.