这是我的用户模型:
class User < ActiveRecord::Base
has_many :posts
end
这是我的帖子模型:
class Post < ActiveRecord::Base
before_create :ejer
belongs_to :user
def ejer
self.user.build
end
end
我正在使用设计,当我登录并尝试创建帖子时,我收到此错误:
NoMethodError in PostsController#create
undefined method `build' for nil:NilClass
我在posts表中创建了一个user_id列。
为什么我会收到错误,如何将当前用户与帖子关联?
答案 0 :(得分:0)
self.user
将为nil
,因此您尝试在nil上运行方法构建,这将引发您正在获得的异常。
要将用户添加到帖子,您可以通过设置属性来分配:
def ejer
self.user = User.new
end
您也可以使用build_user方法
def ejer
build_user
end
或者将用户设置为现有用户:
def ejer
self.user = User.first
end
答案 1 :(得分:0)
根据您对马里奥的回应判断,您实际上并不想建立新用户 - 这会创建新记录。
我建议您查看sentient_user gem。一旦你在模型和控制器中正确地连接它,你的帖子模型就可以变成:
class Post < ActiveRecord::Base
belongs_to :user
validates :user, :presence => true
before_validate do
self.user ||= User.current_user
end
end
我将钩子更改为before_validate
并添加了验证以确保存在用户关联,因为在大多数情况下,允许在没有用户ID的情况下创建帖子是没有意义的。
(哦,我确定有其他解决方案来获取User.current_user或同等产品,sentient_user只是我个人使用的。)