2013-06-30 38 views
0

如何將自定義屬性分配給ActiveRecord模型? 例如,我可以通過查詢時做到這一點:ActiveRecord自定義屬性

select("(CASE WHEN wishlist_items.id IS null THEN 0 ELSE 1 END) AS is_wishlisted_by_me"). 

這增加了自定義is_wishlisted_by_me屬性。但是,如果我已經有一個AR模型的實例,我想做的事:

model.is_wishlisted_by_me = true 

這個返回NoMethodError: undefined method

NoMethodError: undefined method `is_wishlisted_by_me=' for #<SIImage:0x007fc8c41c7ef8> 
    from /Users/Test/.rvm/gems/ruby-1.9.3-p327/gems/activemodel-3.2.13/lib/active_model/attribute_methods.rb:407:in `method_missing' 
    from /Users/Test/.rvm/gems/ruby-1.9.3-p327/gems/activerecord-3.2.13/lib/active_record/attribute_methods.rb:149:in `method_missing' 
    from (irb):8 
    from /Users/Test/.rvm/gems/ruby-1.9.3-p327/gems/railties-3.2.13/lib/rails/commands/console.rb:47:in `start' 
    from /Users/Test/.rvm/gems/ruby-1.9.3-p327/gems/railties-3.2.13/lib/rails/commands/console.rb:8:in `start' 
    from /Users/Test/.rvm/gems/ruby-1.9.3-p327/gems/railties-3.2.13/lib/rails/commands.rb:41:in `<top (required)>' 
    from script/rails:6:in `require' 
    from script/rails:6:in `<main>' 
+1

'NoMethodError:未定義method'不足以..未定義方法名稱也需要知道..給出完整的錯誤堆棧。 –

+0

@Priti更新了堆棧 – 0xSina

+0

@ 0xSina你在哪裏寫這行? model.is_wishlisted_by_me = true –

回答

1

我認爲你可以這樣做,在定義attr_accessible您型號:

attr_accessible :user_count 

r = User.find_by_sql("select count(*) as user_count from users") 

puts r.first.user_count 

如果哈希會爲你做,你可以嘗試

User.connection.select_all("select count(*) as user_count from users") 

將返回散列的陣列等[{:USER_COUNT => 1}]

0

這是我做了什麼:

after_initialize do 
    self.is_wishlisted_by_me = nil unless @attributes.key?("is_wishlisted_by_me") 
end 

def is_wishlisted_by_me 
    @attributes["is_wishlisted_by_me"] 
end 

def is_wishlisted_by_me=(value) 
    @attributes["is_wishlisted_by_me"] = value 
end