1

我在爲has_one多態模型提交嵌套形式時遇到質量分配錯誤。表單正在嘗試創建基於polymorphic association Rails guide的Employee和Picture實例。具有多態關聯的質量分配錯誤

我將不勝感激字面上任何功能例如對於HAS_ONE多態模型嵌套創作形式的!我知道有大量關於質量分配錯誤的問題,但我從來沒有見過一個多態關聯的工作示例。

模型

class Picture < ActiveRecord::Base 
    belongs_to :illustrated, :polymorphic => true 
    attr_accessible :filename, :illustrated 
end 

class Employee < ActiveRecord::Base 
    has_one :picture, :as => :illustrated 
    accepts_nested_attributes_for :picture 
    attr_accessible :name, :illustrated_attribute 
end 

遷移

create_table :pictures do |t| 
    t.string :filename 
    t.references :illustrated, polymorphic: true 
end 

create_table :employees do |t| 
    t.string :name 
end 

控制器/ employees_controller.rb

... 
def new 
    @employee = Employee.new 
    @employee.picture = Picture.new 
end 

def create 
    @employee = Employee.new(params[:employee]) 
    @employee.save 
end 
... 

錯誤

在模型中,我試過的每個排列:圖文並茂,:圖片,:illustrated_attribute,:illustrated_attributes,:picture_attribute,:picture_attributes等任何提示或例子?

編輯:

_form.html.erb

<%= form_for(@employee) do |f| %> 

    <%= f.fields_for :illustrated do |form| %> 
    <%= form.text_field :filename %> 
    <% end %> 

    <%= f.text_field :name %> 
    <%= f.submit %> 

<% end %> 
+0

您可以添加您的視圖文件的代碼?而應該是':illustrated_attributes'。 – 2013-02-09 21:46:00

+0

另一件事是在員工#新操作中用'@ employee.build_picture'替換這一行'@employee.picture = Picture.new'。這是用has_one/belongs_to關聯建立關聯記錄的正確方法。 – 2013-02-09 22:01:11

+0

謝謝 - 添加了視圖代碼。我在模型中嘗試了':illustrated_attributes',但得到了同樣的錯誤。也更改爲'@ employee.build_picture',但仍然收到相同的錯誤。 – 2013-02-09 22:02:40

回答

0

,需要相應地指定nested_attributes。 accepts_nested_attributes_for將該關聯的名稱作爲參數,然後您需要將相同的assoc_attributes添加到您的attr_accessible。因此,改變你的員工模型

class Employee < ActiveRecord::Base 
    has_one :picture, :as => :illustrated 
    accepts_nested_attributes_for :picture 
    attr_accessible :name, :picture_attribute 
end 

並在視圖代碼改變field_for

<%= f.fields_for :picture do |form| %>