ruby on rails - ActiveRecord: scope with a lambda applied on top of has_many Error -
i have following code:
class user < activerecord::base has_many :transactions end class transaction < activerecord::base belongs_to :user belongs_to :owner, class_name: 'user' scope :user, ->(user) { where('user_id = ?', user.id) } scope :owner, ->(user) { where('owner_id = ?', user.id) } scope :active, where(is_active: true) end if type following in console have:
transaction.user(user.first).class # activerecord::transaction ok user.first.transactions.class # array ko user.first.transactions.active.class # activerecord::transaction ok user.first.transactions.where(used_id: user.first.id).class # activerecord::transaction ok user.first.transactions.owner(user.first) # error: nomethoderror: undefined method `+' #<user:0x00000007d7d528> /home/augustin/.rvm/gems/ruby-2.1.4/gems/activemodel-3.2.21/lib/active_model/attribute_methods.rb:407:in `method_missing' /home/augustin/.rvm/gems/ruby-2.1.4/gems/activerecord-3.2.21/lib/active_record/attribute_methods.rb:149:in `method_missing' /home/augustin/.rvm/gems/ruby-2.1.4/gems/activesupport-3.2.21/lib/active_support/core_ext/array/access.rb:19:in `to' /home/augustin/.rvm/gems/ruby-2.1.4/gems/activerecord-3.2.21/lib/active_record/associations/collection_proxy.rb:91:in `method_missing' (irb):14 /home/augustin/.rvm/gems/ruby-2.1.4/gems/railties-3.2.21/lib/rails/commands/console.rb:47:in `start' /home/augustin/.rvm/gems/ruby-2.1.4/gems/railties-3.2.21/lib/rails/commands/console.rb:8:in `start' /home/augustin/.rvm/gems/ruby-2.1.4/gems/railties-3.2.21/lib/rails/commands.rb:41:in `<top (required)>' script/rails:40:in `require' script/rails:40:in `<main>' and craziest thing that:
user.first.transactions.active.owner(user.first) works!!
i'm using rails 3.2 pretty old know, still, annoying, right?
questions are:
- shouldn't
user.first.transactions.classactiverecord::relation? - why error occurs @
user.first.transactions.owner(user.first)? activerecord bug or doing wrong?
rails consolespecial associations, "load" them turned arrays.i think might have naming clash. have associations
user,owner, define scopes same names. use class methods, opt little more meaningful names (avoiding name clash).
so write like:
def self.from_user(user) where(user_id: user.id) end def self.owned_by(user) where(owner_id: user.id) end i not sure cause of error naming or because use scope method.
Comments
Post a Comment