2

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

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

1 回答 1

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 (以及更多路线)

于 2013-02-05T07:53:48.553 回答