2011-05-12 5 views
0

에게 간단한 배경`accepts_nested_attributes_for`,하지만 첫 번째 자식

내가/연습 레일을 배울 수있는 기존의 포럼을 만들고있어 수정합니다. 사용자가 새 항목을 만들 때,

User Model 
    has_many :topics 
    has_many :posts 

Topic Model 
    has_many :posts 
    belongs_to :user 

Post Model 
    belongs_to :user 
    belongs_to :topic 

그러나, 나는 또한 그들이 동시에 (포럼이 작동처럼) 그 주제 내 첫 번째 게시물을 만들려고합니다. 또한 주제 작성자가 주제를 편집 할 때 첫 번째 글을 편집합니다.

따라서 토픽 모델에 accepts_nested_attributes_for :posts을 추가했습니다.

# topics/_form 
<%= form_for [@topic] do |topic| %> 
    <%= topic.text_field :name %> 
    <% topic.fields_for :posts do |post| %> 
    <%= post.text_area :content %> 
    <% end %> 
<% end %> 

[질문

이 코드는 작동합니다

# TopicController 
def new 
    @topic = current_user.topics.new 
    @topic.posts.build 
end 

그리고 여기가 중첩 된 형태입니다. 사용자는 주제 작성과 함께 첫 번째 게시물을 작성합니다.

그러나 다른 사용자가 주제에 대한 게시물을 만들고 @topic.posts이 펼쳐지면서 주제 작성자가 주제를 편집하면 주제의 모든 게시물에 대한 텍스트 영역이 주제 작성자에 의해 편집 가능으로 나타납니다.

주제 작성자가 views/topics/_form 양식의 주제의 첫 번째 소식 만보고 편집 할 수 있도록하려면 어떻게해야합니까 ??

답변

0

유용한 자원 등재 http://apidock.com/rails/ActionView/Helpers/FormHelper/fields_for

새로운 부분은 함께 topics/_form 그냥 topics#edit 행동을 _edit_form을했다. 주제 컨트롤러에서

<%= form_for @topic do |f| %> 
    <%= f.error_messages %> 
    <p> 
    <%= f.label :name %><br /> 
    <%= f.text_field :name %> 
    </p> 
    <p> 
    <%= f.fields_for :posts, ---->@post<---- do |p| %> 
     <%= p.text_area :content %> 
    <% end %> 
    </p> 
    <p><%= f.submit %></p> 
<% end %> 

:

def edit 
    @topic = ... 
    @post = @topic.posts.first 
end 

은 API의 문서 (그림 이동)를 읽고, 나는 당신이 forms_for에 대한 인스턴스를 지정할 수 있다는 것을 발견

관련 문제