Ruby on rails 3 `接受“”的\u嵌套的\u属性,但只修改第一个子项

Ruby on rails 3 `接受“”的\u嵌套的\u属性,但只修改第一个子项,ruby-on-rails-3,nested-forms,Ruby On Rails 3,Nested Forms,简要的背景 我正在制作一个传统的论坛来学习/练习Rails User Model has_many :topics has_many :posts Topic Model has_many :posts belongs_to :user Post Model belongs_to :user belongs_to :topic 但是,当用户创建新主题时,我也希望他们同时在该主题内创建第一篇帖子(就像论坛工作一样)。此外,当主题创建者编辑主题时,他也会编辑第一篇文章

简要的背景

我正在制作一个传统的论坛来学习/练习Rails

User Model
  has_many :topics
  has_many :posts

Topic Model
  has_many :posts
  belongs_to :user

Post Model
  belongs_to :user
  belongs_to :topic
但是,当用户创建新主题时,我也希望他们同时在该主题内创建第一篇帖子(就像论坛工作一样)。此外,当主题创建者编辑主题时,他也会编辑第一篇文章

因此,我在主题模型中添加了posts的
accepts\u nested\u attributes\u

# TopicController
def new
  @topic = current_user.topics.new
  @topic.posts.build
end
下面是嵌套表单:

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

这个代码有效。用户将在创建主题的同时创建第一篇文章

但是,当其他用户为主题创建帖子并且
@Topic.Posts
展开时,当主题创建者编辑主题时,主题中每个帖子的文本区域显示为可由主题创建者编辑

如何使主题创建者只能在
视图/topics/\u表单
表单上查看和编辑主题的第一篇文章???

有用资源:

主题/\u表单
旁边创建了一个名为
\u edit\u表单
的新分部,仅用于
主题
操作

阅读API文档(见图),我发现您可以为
forms\u指定一个实例:

<%= 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