簡體   English   中英

使用accepts_nested_attributes_for更新關聯的問題

[英]Issues using accepts_nested_attributes_for to update associations

我正在嘗試構建一種在更新父對象時更新關聯的表單。 我一直在嘗試使用accepts_nested_attributes_for選項以及attr_accessible但是仍然遇到Can't mass-assign protected attributes錯誤。

這是我的模型:

class Mastery < ActiveRecord::Base
  attr_accessible :mastery_id,
                  :name,
                  :icon,
                  :max_points,
                  :dependency,
                  :tier,
                  :position,
                  :tree,
                  :description,
                  :effects_attributes
  has_many :effects, :as => :affects, :dependent => :destroy, :order => 'effects.value'
  accepts_nested_attributes_for :effects
end


class Effect < ActiveRecord::Base
  attr_accessible :name,
                  :modifier,
                  :value,
                  :affects_id,
                  :affects_type
  belongs_to :affects, :polymorphic => true
end

這是呈現表單的部分內容:

<%= semantic_form_for [ :manage, resource ], :html => {:class => 'default-manage-form' } do |f| %>
  <%= f.inputs do %>
    <% attributes.each do |attr| %>
      <%= f.input attr.to_sym %>
    <% end %>

    <% if resource.respond_to? :effects %>
      <% resource.effects.each do |effect| %>
        <hr>
        <%= f.inputs :modifier, :name, :value, :for => effect %>
      <% end %>
    <% end %>

    <%= f.actions do %>
      <%= f.action :submit %>
    <% end %>
  <% end %>
<% end %>

我的表單用於掌握記錄,其中包含多個效果記錄。 誰能看到我為什么會遇到此錯誤以及如何解決該錯誤?

我通過做兩件事解決了這個問題:

1)更改表單結構以使用fields_for

2)將:effects_attributes添加到精通模型的attr_accessible

這是新的表單代碼:

<%= semantic_form_for [ :manage, resource ], :html => {:class => 'default-manage-form' } do |f| %>
  <%= f.inputs do %>
    <% attributes.each do |attr| %>
      <%= f.input attr.to_sym %>
    <% end %>

    <% if resource.respond_to? :effects %>
      <%= f.fields_for :effects do |b| %>
        <hr>
        <%= b.inputs :modifier, :name, :value %>
      <% end %>
    <% end %>

    <%= f.actions do %>
      <%= f.action :submit %>
    <% end %>
  <% end %>
<% end %> 

並完成模型:

class Mastery < ActiveRecord::Base
  attr_accessible :name,
                  :icon,
                  :max_points,
                  :dependency,
                  :tier,
                  :position,
                  :tree,
                  :description,
                  :effects_attributes
  has_many :effects, :as => :affects, :dependent => :destroy, :order => 'effects.value'
  accepts_nested_attributes_for :effects
end

暫無
暫無

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

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