我在尝试使用db:seed"时遇到以下错误按照说明使用设计添加角色后,使用此tutorial
NoMethodError:未定义的方法`find_or_create_by_name'对于#...
我的用户模型如下:
class User < ActiveRecord::Base
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable,
:omniauthable, :omniauth_providers => [:facebook]
#Roles an default role setup
belongs_to :role
before_create :set_default_role
private
def set_default_role
self.role ||= Role.find_by_name('student')
end
end
Seeds.rb
['student', 'teacher', 'moderator', 'admin'].each do |role|
Role.find_or_create_by_name role
end
当我运行rake db:seed:
时,我在控制台中得到以下内容rake aborted!
NoMethodError: undefined method `find_or_create_by_name' for #<Class:0x0000010137df78>
/Users/Dizzy/.rvm/gems/ruby-2.1.1/gems/activerecord-4.1.1/lib/active_record/dynamic_matchers.rb:26:in `method_missing'
/Users/Dizzy/Documents/MM/mandarinminds/db/seeds.rb:10:in `block in <top (required)>'
/Users/Dizzy/Documents/MM/mandarinminds/db/seeds.rb:9:in `each'
/Users/Dizzy/Documents/MM/mandarinminds/db/seeds.rb:9:in `<top (required)>'
/Users/Dizzy/.rvm/gems/ruby-2.1.1/gems/activesupport-4.1.1/lib/active_support/dependencies.rb:241:in `load'
/Users/Dizzy/.rvm/gems/ruby-2.1.1/gems/activesupport-4.1.1/lib/active_support/dependencies.rb:241:in `block in load'
/Users/Dizzy/.rvm/gems/ruby-2.1.1/gems/activesupport-4.1.1/lib/active_support/dependencies.rb:232:in `load_dependency'
/Users/Dizzy/.rvm/gems/ruby-2.1.1/gems/activesupport-4.1.1/lib/active_support/dependencies.rb:241:in `load'
/Users/Dizzy/.rvm/gems/ruby-2.1.1/gems/railties-4.1.1/lib/rails/engine.rb:543:in `load_seed'
/Users/Dizzy/.rvm/gems/ruby-2.1.1/gems/activerecord-4.1.1/lib/active_record/tasks/database_tasks.rb:184:in `load_seed'
/Users/Dizzy/.rvm/gems/ruby-2.1.1/gems/activerecord-4.1.1/lib/active_record/railties/databases.rake:173:in `block (2 levels) in <top (required)>'
任何人都可以了解一下`find_or_create_by_name&#39;遇到了这个问题?
答案 0 :(得分:1)
find_or_create_by_(attr_name)
。http://guides.rubyonrails.org/4_0_release_notes.html#active-record-deprecations
您需要使用find_or_create_by
和哈希参数:
Role.find_or_create_by name: role
答案 1 :(得分:1)
更好的选择将在Rails 4中:
Seeds.rb
['student', 'teacher', 'moderator', 'admin'].each do |role|
Role.where(name: role).first_or_create
end
由于