2

我有独立的 Ruby 应用程序,并希望将它与活动记录 gem 一起使用。我制作了 3 个模型:user.rb

require 'active_record'

class User < ActiveRecord::Base
  has_many :posts, :dependent => :destroy
  has_many :comments

  validates :name, :presence => true

  attr_accessible :name, :state
end

post.rb

require 'active_record'

class Post < ActiveRecord::Base
  belongs_to :user
  has_many :comments

  validates :title, :length => { :in => 6..40 }

  attr_accessible :title, :content
end

评论.rb

require 'active_record'

class Comment < ActiveRecord::Base
  belongs_to :user
  belongs_to :post

  validates :content, :presence => true

  attr_accessible :content, :user_id
end

现在我想通过发出以下代码为该帖子和用户填充一个用户、一个帖子和一个评论的数据库:

require 'active_record'
require 'sqlite3'
require './models/user'
require './models/post'
require './models/comment'

ActiveRecord::Base.configurations = YAML::load(IO.read('config/database.yml'))
ActiveRecord::Base.establish_connection("development")

user1 = User.create name: "Joe",   state: "England"

post1 = user1.posts.create title: "RoR introduction", content: "RoR intro."

comment1 = post1.comments.create content: "This is great article!"

但现在它填充数据库但 user_id 为空。我在这里想念什么?

4

2 回答 2

2

我认为您的评论与帖子相关联,而不是用户...

只是说做comment1.user = user1然后comment1.save!

我认为这里的关键问题是发表评论的用户不一定是发表原始帖子的用户。如果是这种情况,您可以通过 through 选项强制执行它。但是,由于任何用户都可以评论帖子,所以说 post1.comments.create 等不应自动拉入创建帖子的用户,对吗?因为它可能是另一个用户...

于 2013-04-10T16:08:18.743 回答
0

我不确定,但我认为您不希望在活动记录类中使用这些 attr_accessible 规范 - 我认为它们会干扰活动记录自动提供的字段 - 尝试删除所有这些

于 2013-04-10T16:00:23.190 回答