Rails帮助创建有很多,属于协会



这是我的用户模型:

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

我正在使用 devise,当我登录并尝试创建帖子时,出现此错误:

NoMethodError in PostsController#create
undefined method `build' for nil:NilClass

我在帖子表中创建了一个列user_id。

为什么我会收到错误,如何帮助使用帖子登录的当前用户?

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

从你对马里奥的评论来看,你实际上并不想建立一个新用户——这将创建一个新记录。

我建议看看sentient_user宝石。一旦你在模型和控制器中正确连接了它,你的帖子模型就可以变成:

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只是我个人使用的解决方案。

相关内容

  • 没有找到相关文章

最新更新