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
感谢任何帮助!
答案 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
文件