我有独立的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
comment.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为null。我在这里缺少什么?
答案 0 :(得分:2)
我认为您的评论与帖子相关联,而不是用户......
只需说comment1.user = user1
然后comment1.save!
我认为这里的关键问题是发表评论的用户不一定是发表原始帖子的用户。如果是这种情况,您可以通过through选项强制执行。但是,由于任何用户都可以评论帖子,然后说post1.comments.create等不应该自动拉入创建帖子的用户吗?因为它可能是另一个用户...
答案 1 :(得分:0)
我不确定,但我认为你不想在活动记录类中使用那些attr_accessible规范 - 我认为它们会干扰活动记录自动提供的字段 - 尝试删除所有这些字段