MODEL1 には account_type があるため、gem 'enumerated_attributes' を使用して、モデルを次のように作成しました。
class MODEL1 < ActiveRecord::Base
enum_attr :account_type, %w(^live demo disabled)
def is_live?
self.account_type == :live
end
def is_not_live?
self.account_type == :demo || self.account_type == :disabled
end
end
私が理解していない奇妙なことは、このようなシードの任意の MODEL1 を照会するときです (これは、rubymine コンソールで次のコマンドを実行したときのエラーですが、この同じ 2 対 1 エラーは rake db:seed 中に発生します) :
MODEL1.all.sample
と
MODEL1.all
私はこれを得る:
Dealer Load (0.3ms) SELECT "MODEL1".* FROM "MODEL1S"
ArgumentError: wrong number of arguments (2 for 1)
from /.rvm/gems/ruby-2.0.0-p0@web/gems/enumerated_attribute-0.2.16/lib/enumerated_attribute/integrations/active_record.rb:78:in `instantiate'
from /.rvm/gems/ruby-2.0.0-p0@web/gems/activerecord-4.0.0/lib/active_record/querying.rb:45:in `block in find_by_sql'
from /.rvm/gems/ruby-2.0.0-p0@web/gems/activerecord-4.0.0/lib/active_record/result.rb:21:in `block in each'
from /.rvm/gems/ruby-2.0.0-p0@web/gems/activerecord-4.0.0/lib/active_record/result.rb:21:in `each'
from /.rvm/gems/ruby-2.0.0-p0@web/gems/activerecord-4.0.0/lib/active_record/result.rb:21:in `each'
from /.rvm/gems/ruby-2.0.0-p0@web/gems/activerecord-4.0.0/lib/active_record/querying.rb:45:in `map'
from /.rvm/gems/ruby-2.0.0-p0@web/gems/activerecord-4.0.0/lib/active_record/querying.rb:45:in `find_by_sql'
from /.rvm/gems/ruby-2.0.0-p0@web/gems/activerecord-4.0.0/lib/active_record/relation.rb:585:in `exec_queries'
from /.rvm/gems/ruby-2.0.0-p0@web/gems/activerecord-4.0.0/lib/active_record/relation.rb:471:in `load'
from /.rvm/gems/ruby-2.0.0-p0@web/gems/activerecord-4.0.0/lib/active_record/relation.rb:220:in `to_a'
from /.rvm/gems/ruby-2.0.0-p0@web/gems/activerecord-4.0.0/lib/active_record/relation/delegation.rb:49:in `sample'
from (irb):7
from /.rvm/gems/ruby-2.0.0-p0@web/gems/railties-4.0.0/lib/rails/commands/console.rb:90:in `start'
from /.rvm/gems/ruby-2.0.0-p0@web/gems/railties-4.0.0/lib/rails/commands/console.rb:9:in `start'
from /.rvm/gems/ruby-2.0.0-p0@web/gems/railties-4.0.0/lib/rails/commands.rb:64:in `<top (required)>'
シードしようとしているモデル (rake db:seed 中にエラーが発生する場所) は次のとおりです。
model2 = Fabricate(:MODEL2, name: "Any MODEL2 Name #{n}", cost: n, MODEL1: MODEL1.all.sample)
MODEL2 モデルで
belongs_to :MODEL1
MODEL1 モデルでは
has_many :MODEL2s
移行では、MODEL2
t.references :MODEL1
移行では、MODEL1
t.enum :account_type
MODEL1 の account_types を指定する簡単な方法があれば、教えてください。MODEL1.all.sample または MODEL1.all と言えればいいだけです。