Ruby on rails 添加id';欢迎评论

Ruby on rails 添加id';欢迎评论,ruby-on-rails,Ruby On Rails,我是新手。一个看似简单的问题让我陷入困境。我无法查看评论显示页面。我想这是因为我的评论没有个人id。我将comment_id添加到我的comments表中,但没有成功。我得到以下错误: No route matches missing required keys: [:id] 这是我的评论#索引文件: <% @post.comments.each do |comment| %> <div> <strong><td><%= link_to (

我是新手。一个看似简单的问题让我陷入困境。我无法查看评论显示页面。我想这是因为我的评论没有个人id。我将comment_id添加到我的comments表中,但没有成功。我得到以下错误:

No route matches missing required keys: [:id]
这是我的评论#索引文件:

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

感谢您的帮助

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

post_comment_path(@post) 
一定是

post_comment_path(comment)

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

我假设你已经定义了一篇文章和一篇评论之间的关系,使得一篇文章有很多评论或者一篇评论属于一篇文章。您的
comments
表需要一个名为
id
的字段和另一个名为
post\u id
的字段,再次假设包含帖子的表名为
posts
,模型名为
post

这使得评论可以引用它所属的帖子。例如,假设您有以下帖子:

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

-----------------------------------
| id | post_id | title | subtitle |
| -- | ------- | ----- | -------- |
| 19 | 24      | Lorem | Ipsum    |
-----------------------------------

我想问一下,为什么您的评论索引中只有一个@post变量,但假设您的代码正在创建一个链接列表,让它们指向我认为您正在寻找的每个评论的show action:

此外,您还有一个rogue
标记,它将扰乱注释索引中的呈现

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

添加列:注释,:id,:主键

但是假设您在最初的迁移中没有设置
:id=>false
,那么它已经有了一个id,您可以使用
comment.id
,这就是
comment.find(params[:id])
在您的注释中最有可能显示操作的方式。

post\u comment\u路径(:id=>comment.id)
您能试试这个吗



谢谢

Hmm,仍然得到相同的错误。我有一个comment\u id列,但没有为注释生成id。请添加到comment table comment\u id migration added以质疑您的迁移。是否可以发布您的路由。rb应该是
post\u comments\u path(:id=>@post.id)
post\u comment\u path(:id=>@post.id)
是,routes.rb added.check your
post_comment_path
use
rake routes
post_comment_path就是注释#show path。
post_comment_path(:id=>comment.id)
你能试试这个吗?现在,它会给我一个“未定义的方法”注释_path”错误。如果从命令行运行
rake routes
,你会得到什么?您的config/routes.rb文件中是否有
resources:comments
?是的,resources:comments在resources:posts in my routes.rb中。我刚刚在问题中添加了我的routes.rb,如果你想看一下的话。现在,我看到了你的routes.rb文件,只需将
resources:comments
行的一个副本移动到
resources:posts do
部分之外,使用上述代码即可。或者,在不更改路由文件的情况下,您应该能够使用
post\u comment\u路径(@post,comment)
Rails是基于约定的。它希望每个表都有一个名为
id
的标识符。我试图添加一个id列,但得到一个“重复的列名:id”错误。默认情况下是否添加id?我的帖子都有id,没有id列。是的,默认情况下添加。但是,您必须将
post\u id
添加到comments表中。如果您在迁移过程中描述了post和comments之间的关系,也可能会自动添加该id。不,它一直存在。我已经添加了我的评论表以供参考。
-----------------------------------
| id | post_id | title | subtitle |
| -- | ------- | ----- | -------- |
| 19 | 24      | Lorem | Ipsum    |
-----------------------------------