2013-05-15 28 views
0

新手入门,如果答案很明显,表示歉意。 如果我有2个模型,一个用户和评论,一个(1:N)的关系。 当我创建一个用户时,我也在创建一个评论。Rails表单 - 提交给子类

我遇到的麻烦是我该如何编写表单,或者它是否与用户类相关的评论将与用户关联?

<%= form_for(@user) do |f| %> 
    <%= f.text_field :name %> 
    <%= f.text_area :comment ???? %> 
    <%= f.submit %> 
    <% end %> 

回答

1

我想你有意见,以便模型上....

在user.rb添加此

has_many :comments 
accepts_nested_attributes_for :comments 

而且在你的控制器?

def new 
    @user = User.new 
    @user.comments.build 
end 

而在你的表单视图:

<%= form_for @user do |f| %> 
    <%= f.text_field :name %> 
    <%= f.fields_for :comments do |comment_form| %> 
    <%= comment_form.text_field :description %> 
    <% end %> 
<% end %> 
0

假设您的用户表单是正确的,您只需要在用户模型中添加注释作为属性。你不需要一个单独的评论模型。

# schema 

create_table "posts", :force => true do |t| 
t.string "name" 
t.text  "comment" 
t.datetime "created_at", :null => false 
t.datetime "updated_at", :null => false 

您可以创建一个迁移到注释属性添加到您的用户模型

rails g migration add_comment_to_user comment:text 

,你可以删除评论模型,如果这是你所需要的

然后你就可以使用你有它的形式

<%= form_for(@user) do |f| %> 
    <%= f.text_field :name %> 
    <%= f.text_area :comment %> 
    <%= f.submit %> 
<% end %> 

你可能想要添加一些标签到您的表单也

<%= form_for(@user) do |f| %> 
    <%= f.label :name %> 
    <%= f.text_field :name %> 
    <%= f.label :comment %> 
    <%= f.text_area :comment %> 
    <%= f.submit %> 
<% end %> 

希望这可以让你在正确的轨道

+0

但是,如果我尝试添加额外的评论的用户类别将这个不行?只是覆盖? – Derptacos

+0

我只是假设你想在用户表单上发表一条评论。是的,如果你想要做的不仅仅是在用户表单中添加一个简单的评论,你将不得不添加一个评论模型,并执行accept_nested_attributes_for。如果你想在用户模型和类似帖子模型上添加注释,可以查看多态关联。它更先进一些,但值得努力。你可以让用户和帖子等评论,以在多个模型上使用评论。 – fontno