Active Record belongs_to 关联未添加外键
Active Record belongs_to association not adding foreign key
我有一个 'posts' 的嵌套资源,其中包含许多 'comments' 以及这些模型之间建立的关联。但是,当我为 post 创建评论时,评论 table 中的 'post_id' 仍然是空的,并且没有建立 link 。评论文本本身创建正常。
我正在使用 Rails 版本 4.2.1 和 postgresql 数据库。
协会是这样设置的:
class Comment < ActiveRecord::Base
belongs_to :post
end
class Post < ActiveRecord::Base
has_many :comments, dependent: :destroy
end
这是设置的路由:
资源:posts 做
资源:评论
结束
我使用以下代码从 comments/new 视图创建评论:
= form_for [@post, @comment] do |f|
= f.label :comment
= f.text_field :comment
= f.submit "Add Comment"
我的评论控制器是这样的:
class CommentsController < ApplicationController
def new
@post = Post.find(params[:post_id])
@comment = Comment.new
end
def create
@post = Post.find(params[:post_id])
@comment = Comment.create(comment_params)
redirect_to posts_path
end
def comment_params
params.require(:comment).permit(:comment)
end
end
我在评论 table 中设置了列 'post_id',我的架构是这样的:
ActiveRecord::Schema.define(version: 20150404204033) do
# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"
create_table "comments", force: :cascade do |t|
t.string "comment"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.integer "post_id"
end
add_index "comments", ["post_id"], name: "index_comments_on_post_id", using: :btree
create_table "posts", force: :cascade do |t|
t.string "name"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
add_foreign_key "comments", "posts"
end
只是无法弄清楚发生了什么,我在另一个项目中使用了几乎相同的代码并且有效。
任何帮助都会很棒。
在此代码中:
def create
@post = Post.find(params[:post_id])
@comment = Comment.create(comment_params)
redirect_to posts_path
end
您找到了 post 但从未对其进行任何操作。该评论不知道 post。您需要将评论的 post 设置为 @post
.
我有一个 'posts' 的嵌套资源,其中包含许多 'comments' 以及这些模型之间建立的关联。但是,当我为 post 创建评论时,评论 table 中的 'post_id' 仍然是空的,并且没有建立 link 。评论文本本身创建正常。
我正在使用 Rails 版本 4.2.1 和 postgresql 数据库。
协会是这样设置的:
class Comment < ActiveRecord::Base
belongs_to :post
end
class Post < ActiveRecord::Base
has_many :comments, dependent: :destroy
end
这是设置的路由:
资源:posts 做 资源:评论 结束
我使用以下代码从 comments/new 视图创建评论:
= form_for [@post, @comment] do |f|
= f.label :comment
= f.text_field :comment
= f.submit "Add Comment"
我的评论控制器是这样的:
class CommentsController < ApplicationController
def new
@post = Post.find(params[:post_id])
@comment = Comment.new
end
def create
@post = Post.find(params[:post_id])
@comment = Comment.create(comment_params)
redirect_to posts_path
end
def comment_params
params.require(:comment).permit(:comment)
end
end
我在评论 table 中设置了列 'post_id',我的架构是这样的:
ActiveRecord::Schema.define(version: 20150404204033) do
# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"
create_table "comments", force: :cascade do |t|
t.string "comment"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.integer "post_id"
end
add_index "comments", ["post_id"], name: "index_comments_on_post_id", using: :btree
create_table "posts", force: :cascade do |t|
t.string "name"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
add_foreign_key "comments", "posts"
end
只是无法弄清楚发生了什么,我在另一个项目中使用了几乎相同的代码并且有效。
任何帮助都会很棒。
在此代码中:
def create
@post = Post.find(params[:post_id])
@comment = Comment.create(comment_params)
redirect_to posts_path
end
您找到了 post 但从未对其进行任何操作。该评论不知道 post。您需要将评论的 post 设置为 @post
.