将id添加到评论中

时间:2013-08-23 03:34:58

标签: ruby-on-rails

Rails新手在这里。一个看似简单的问题让我陷入困境。我无法查看评论#show page。我认为这是因为我的评论没有个人ID。我将comment_id添加到我的评论表中但没有成功。我收到以下错误:

No route matches missing required keys: [:id]

这是我的评论#index file:

<% @post.comments.each do |comment| %>
<div>
<strong><td><%= link_to (comment.title), post_comment_path(@post) %></strong>
<%= comment.subtitle %>
</div>
<% end %>

以下是我添加comment_id列的迁移:

rails generate migration AddComment_idToComments comment_id:integer

我的routes.rb文件:

resources :posts do

 resources :comments
 resources :pictures
end

devise_for :users
root to: 'posts#index'
match '/about', to: 'pages#about',  via:'get'

这是我的评论表:

create_table "comments", force: true do |t|
t.integer  "post_id"
t.integer  "user_id"
t.string   "title"
t.string   "subtitle"
t.string   "body"
t.datetime "created_at"
t.datetime "updated_at"
t.integer  "comment_id"
end    

感谢任何帮助!

4 个答案:

答案 0 :(得分:1)

我假设你已经定义了帖子和评论之间的关系,以便帖子有很多评论或评论属于帖子。您的comments表需要一个名为id的字段和另一个名为post_id的字段,再次假设包含帖子的表名为posts,模型名为{{1} }}

这允许评论引用它所属的帖子。例如,假设你有这篇文章:

Post

现在,评论可以使用------------------------ | id | title | content | | -- | ----- | ------- | | 24 | Lorem | Ipsum | ------------------------ 字段将自己附加到此帖子:

post_id

答案 1 :(得分:1)

我会问为什么你的评论索引中有一个@post变量,但假设你的代码正在创建一个链接列表,让它们指向我相信你正在寻找的每个评论的show动作:

<%= link_to comment.title, comment %>

此外,你在那里有一个流氓<td>标签会在评论索引中弄乱渲染。

此外,除非您在创建模型时在迁移中明确将id设置为false,否则默认情况下它具有一个id作为其主键。如果您在创建模型时将id设置为false,则可以通过使用

在表上运行迁移来将其添加回来

add_column :comments, :id, :primary_key

但是假设您没有在原始迁移中设置:id => false,那么它已经拥有了您可以使用comment.id访问的ID,这就是您最有可能使用的Comment.find(params[:id])您的评论#show action works。

答案 2 :(得分:1)

post_comment_path(:id => comment.id)可以试试吗

由于

答案 3 :(得分:0)

我认为你的路线助手有问题:

post_comment_path(@post) 

必须是

post_comment_path(comment)

您可以在db/schema.rb文件

中看到您的评论是否包含id列