1

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

No route matches missing required keys: [:id]

这是我的评论#index 文件:

<% @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

4 回答 4

1

post_comment_path(:id => comment.id)你能试试这个吗

谢谢

于 2013-08-23T05:31:12.087 回答
1

我会问为什么您的评论索引中有一个 @post 变量,但假设您的代码正在创建一个链接列表,以使它们指向每个单独的评论的显示操作,我相信您正在寻找:

<%= link_to comment.title, comment %>

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

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

add_column :comments, :id, :primary_key

但是假设您没有:id => false在原始迁移中设置,那么它已经有一个您可以访问的 id comment.id,这就是Comment.find(params[:id])您最有可能在您的 Comments#show 操作中的工作方式。

于 2013-08-23T04:39:29.940 回答
1

我假设您已经定义了帖子和评论之间的关系,使得帖子有很多 评论或评论属于帖子。您的comments表需要一个名为的字段id和另一个名为的字段post_id,再次假设包含帖子的表被调用posts并且模型被命名Post

这让评论可以引用它所属的帖子。例如,假设您有这篇文章:

------------------------
| id | title | content |
| -- | ----- | ------- |
| 24 | Lorem | Ipsum   |
------------------------

post_id现在可以使用以下字段将评论附加到此帖子:

-----------------------------------
| id | post_id | title | subtitle |
| -- | ------- | ----- | -------- |
| 19 | 24      | Lorem | Ipsum    |
-----------------------------------
于 2013-08-23T03:39:30.883 回答
0

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

post_comment_path(@post) 

一定是

post_comment_path(comment)

您可以看到您的评论在您的db/schema.rb文件中是否有 id 列

于 2013-08-23T03:37:51.070 回答