2013-02-05 41 views
2

所以我正在制作一个使用ROR的网络应用程序,我无法弄清楚这个表单的正确语法是什么。我目前正在为注释和帖子制作关联类型的代码。Ruby on Rails协会表格

<%= form_for @comment do |f| %> 
<p> 
<%= f.hidden_field :user_id, :value => current_user.id %> 
<%= f.label :comment %><br /> 
<%= f.text_area :comment %> 
</p> 

<p> 
<%= f.submit "Add Comment" %> 
</p> 
<% end %> 
+0

有什么问题吗? –

+1

通常,您不必在表单中传递'user_id'。在“控制器”中关联。 –

+0

感谢您的答案球员,但我仍然得到这个错误: 未定义的方法'post_comments_path'为#<#:0x3f805e0> – Pau

回答

4

您的形式是很好,除了第一行(你不需要隐藏字段为USER_ID,这就是通过你的关系做了):

<%= form_for(@comment) do |f| %> 

应该是:

<%= form_for([@post, @comment]) do |f| %> 

现在您呈现一个表单,用于创建或更新特定帖子的评论。

但是,你应该改变你的模型和控制器。

class Post 
    has_many :comments 
end 

class Comment 
    belongs_to :post 
end 

这会让您访问@ post.comments,显示属于特定帖子的所有评论。

在你的控制器,你可以为特定的访问后评论:

class CommentsController < ApplicationController 
    def index 
    @post = Post.find(params[:post_id]) 
    @comment = @post.comments.all 
    end 
end 

这种方式,您可以访问的评论索引所需的特定讯息。

更新

一件事,你的路线也应该是这样的:

AppName::Application.routes.draw do 
    resources :posts do 
    resources :comments 
    end 
end 

这会给你访问post_comments_path(和较多的路由)

+0

谢谢。 :) 忘记编辑我的路线。 -.- – Pau