我有这个AuthorizationHelpers,我在RSpec上使用。
module AuthorizationHelpers
def assign_role!(user, role, post)
Role.where(user: user, post: post).delete_all
Role.create!(user: user, role: role, post: post)
end
end
RSpec.configure do |c|
c.include AuthorizationHelpers
end
现在我想在种子上使用这种方法assign_role!
。
像这样:
Post.all.each do |post|
[:manager, :editor, :viewer].each do |role|
User.all.where(admin: false).each do |user|
assign_role!(user, role, post)
end
end
end
如果我尝试在rails控制台上使用它,我会收到错误:
NoMethodError: undefined method `assign_role!' for main:Object
有没有办法在种子上使用它?或者我需要做其他事情?
答案 0 :(得分:1)
In the end, the OP abandoned use of the module and did the following in seeds.rb
:
unless Post.exists?(title: title)
post = Post.create!(...)
[:manager, :editor, :viewer].each do |role|
if user = User.find_by_email("#{role}@newscity.com")
user.roles.create(post: post, role: role)
end
end
Check out the chat (in the original question comments) for the whole story.
答案 1 :(得分:0)
这个答案不一定与您的问题有关,而是与您的代码的语义有关。
首先:为什么你没有将assign_role!
定义为用户模型的实例方法,你可以在任何地方使用?对于那种逻辑来说似乎是一个合理的地方。
第二:种子应该是应用程序在全新安装后正常工作的最小数据。通常这是一次性命令;要在规范中创建数据,请考虑使用工厂(一个流行的库是FactoryGirl)。
您的代码调用spec
文件夹中定义的内容会感觉不自然。