2013-04-25 3 views
0

Эти запросы AREL не работают в Rails 3. Может кто-нибудь помочь мне расшифровать эту ошибку?ActiveRecord - NoMethodError

NoMethodError (undefined method `id' for #<ActiveRecord::Relation:0xabf6f44>): 
    app/controllers/admin_controller.rb:206:in `save_user' 

Все это вызывает ту же ошибку, как показано выше

@existing = Privilege.find(:first, :conditions => "b2b_user_id = #{@user.id} AND vendor_id = #{@vendor_id}") 

    @existing = Privilege.find_by_sql("SELECT * FROM b2b_privileges WHERE b2b_user_id = ? AND vendor_id = ? LIMIT 1",@user.id,@vendor_id) 

    @existing = Privilege.where(:b2b_user_id => @user.id, :vendor_id => @vendor_id) 

Но когда я изменить это:

@user = B2bUser.where("id = ?",params[:id]) 

Для этого:

@user = B2bUser.find_by_id(params[:id]) 

Запросы работают. Зачем?

Благодаря

ответ

2

Что вы получаете WHN используя метод «где» это просто отношение, думать о нем, как запрос, который до сих пор не выполняется, то вы должны вызвать метод для извлечения данных, например: первый , все, наконец, to_a и т.д.

@user = B2bUser.where("id = ?",params[:id]) #this is just an active record relation 
@user = B2bUser.where("id = ?",params[:id]).first #this is your object 

Почитайте об отношениях, они действительно интересны relations