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.