Ruby on rails 3 `接受“”的\u嵌套的\u属性,但只修改第一个子项
简要的背景 我正在制作一个传统的论坛来学习/练习RailsRuby 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 但是,当用户创建新主题时,我也希望他们同时在该主题内创建第一篇帖子(就像论坛工作一样)。此外,当主题创建者编辑主题时,他也会编辑第一篇文章
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