Active Record属于关联而不添加外键

时间:2015-04-04 22:45:50

标签: ruby-on-rails ruby-on-rails-4 activerecord associations

我有一个带有'帖子的嵌套资源'包含许多评论'和这些模型之间建立的关联。但是,当我为帖子创建评论时,< post_id'在注释表中保持为空并且没有建立链接。评论文本本身可以创建。

我使用的是Rails ver 4.2.1和postgresql数据库。

关联设置如下:

class Comment < ActiveRecord::Base
  belongs_to :post
end

class Post < ActiveRecord::Base
  has_many :comments, dependent: :destroy
end

这是路线设置:

资源:帖子做     资源:评论   端

我使用以下代码从评论/新视图创建评论:

= 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

我有专栏&#39; post_id&#39;在评论表中设置,我的架构是这样的:

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

只是无法解决正在发生的事情,我在另一个项目中使用了几乎完全相同的代码并且有效。

任何帮助都会很棒。

1 个答案:

答案 0 :(得分:1)

在此代码中:

 def create
    @post = Post.find(params[:post_id])
    @comment = Comment.create(comment_params)
    redirect_to posts_path
 end

你发现这个帖子但从未对它做任何事情。评论不知道该帖子。您需要将评论的帖子设置为@post