2

좋아요, 물어 보길 싫지만, 저는 이것에 집착하고 있습니다. I Rails에서 다형성 has_many를 중첩 된 형태로 구현하기

Permissions을 통해 많은 Stands은 (전시로하는 것은 의미)했다Users했다.

그리고 그렇게 내 등록 컨트롤러는이처럼 보였다 :

def new 
    @registree = User.new 
    @registree.build_company 
    @registree.permissions.build.build_stand 
end 

그리고 내 양식은 다음과 같이 보았다 :

<%= simple_form_for @registree, url: register_path do |f| %> 
    ... stuff ... 
    <%= f.simple_fields_for(:permissions) do |perms| %> 
    <%= perms.simple_fields_for(:stands) do |stand| %> 
     ... stuff ... 
    <% end %> 
    <% end % 
<% end %> 

그리고 그것은했다!

그러나 고객은 Users에 많은 Pavilions (전시 기간)을 갖길 원했습니다.

그래서 has_many 관계를 다형성으로 만들기로했습니다.

class Permission < ActiveRecord::Base 
    attr_accessible :level, :user_id, :ownable_id, :ownable_type, :ownable_attributes 

    belongs_to :ownable, polymorphic: true 
    belongs_to :user 

    accepts_nested_attributes_for :ownable 
end 

을 그리고 ownable_type 지금 Stand 또는 Pavilion 중 하나가 될 수 있습니다

그래서 지금은 내 권한 모델은 다음과 같습니다.

몇 가지 간단한 테스트에서 작동합니다.

매직.

하지만이 경우 중첩 된 양식을 작성하는 방법에 대해 머리를 터지게 할 수 없습니다.

그래서 나의 새로운 발견 다형성 내 등록 컨트롤러에서이 라인은 그것이 ownable 일에있어, 내 Permission 모델의 스탠드에 직접 관계가 없기 때문에 가지 의미가있다 오류

@registree.permissions.build.build_stand 

에게 던졌습니다 스탠드 또는 파빌리온이 될 수 있습니다.

그래서 나는 역시 작동하지 않는 build_ownable을 시도했습니다.

그럼 간단히 폼에 중첩하여 Permission을 무시했습니다. 내 User 모델

컨트롤러

@registree.stands.build 

에두고

그리고이.

accepts_nested_attributes_for :stands 

폼을 표시하고 제출하는만큼 나를 얻었지 만 스탠드를 만들지 않았습니다. 그래서 분명히 관계가 제대로 구축되지 않습니다.

아무도 도움의 손길을 낼 수 있습니까?

감사합니다.당신의 polymorphic association에서

답변

0

,이처럼 정의해야 할 것 :

class Permission < ActiveRecord::Base 
    belongs_to :permissable, polymorphic: true 
    belongs_to :user 
end 

class Stand < ActiveRecord::Base 
    has_many :permissions, as: :permissable 
end 

class User < ActiveRecord::Base 
    has_many :permissions 
end 

class Pavilion < ActiveRecord::Base 
    has_many :permissions, as: :permissable 
end 
관련 문제