1

has_one 다형성 모델에 대해 중첩 된 양식을 제출할 때 질량 지정 오류가 발생합니다. 양식에서 polymorphic association Rails guide을 기반으로 Employee 및 Picture 인스턴스를 만들려고합니다.다형성 연관에 의한 질량 지정 오류

문자 그대로 ANY 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 당신은 적절하게 nested_attributes를 지정해야합니다

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

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

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

<% end %> 
+0

에보기 코드에서 field_for 줄을 변경? 그리고 대신': illustrated_attributes'가 있어야합니다. –

+0

다른 작업은 employees # new action에서'@employee.picture = Picture.new'를'@ employee.build_picture'로 바꾸는 것입니다. 이것은 has_one/belongs_to 연관과 연관된 레코드를 만드는 올바른 방법입니다. –

+0

감사합니다 -보기 코드를 추가했습니다. 모델에서': illustrated_attributes'를 시도했지만 같은 오류가 발생했습니다. '@ employee.build_picture'로 변경되었지만 여전히 같은 오류가 발생합니다. –

답변

0

. accepts_nested_attributes_for은 매개 변수로 연결 이름을 취한 다음 attr_accessible에 동일한 assoc_attributes을 추가해야합니다. 그래서

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

에 직원 모델을 변경하고 뷰 파일의 코드를 추가 할 수

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