0

これらの AREL クエリは Rails 3 では機能しません。このエラーの解読を手伝ってもらえますか?

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])

クエリは機能します。なんで?

ありがとう

4

1 に答える 1

2

メソッド「where」を使用して得られるものは単なる関係です。まだ実行されていないクエリのように考えてください。次に、メソッドを呼び出してデータを取得する必要があります。たとえば、first、all、last、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

関係について少し読んでください、それらは本当に興味深い 関係です

于 2013-04-25T19:56:45.250 に答える