2

これはおそらくほとんどの人にとって簡単なことですが、複数の引数を持つ多くのスコープを実際に書いたことはありません。単一の引数で問題ありませんが、ここでは不明です。「現在のユーザーがチェックアウトしたすべての書籍を提供してください」というスコープを作成しようとしています

だから私は私の本モデルでこれを思いついた

scope :checked_out_book, lambda{|user| { :conditions => { :user_id => current_user.id, :checked_out => true } }

以前にラムダを使用したことがないので、正しく使用しているかどうかわからないため、どちらにしてもエラーが発生します

syntax error, unexpected keyword_end, expecting '}'

誰でも私を正しい方向に向けることができますか

編集

スコープをに変更しました

scope :checked_out_book, lambda {|user| where(:user_id => user.id, :checked_out => true) }

しかし今、私は得る

引数の数が間違っています (1 に対して 0) ありがとうございます

4

3 に答える 3

4

私は次のようにします:

scope :checked_out_book, lambda {|user| where(:user_id => user.id, :checked_out => true) }
于 2013-01-10T10:46:53.443 に答える
1

モデルではBook、スコープは次のようになります。

scope :checked_out_book, lambda {|user| where(:user_id => user.id, :checked_out => true) }

またはRuby 1.9の場合

scope :checked_out_book, ->(user) { where(user_id: user.id, checked_out: true) }

そして、あなたはそれを次のように呼びます:

Book.checked_out_book(current_user)

Userhas_many以来Books、私はおそらくこのようなものを使い、スコープを気にしません。Relationメソッドのようなアプローチが必要な場合は、オブジェクトを返すメソッドをいつでも作成できます。

current_user.books.where(checked_out: true)

また

def checked_out_books
  books.where(checked_out: true)
end
# current_user.checked_out_books
于 2013-01-10T11:18:54.153 に答える
1
scope :checked_out_book, lambda {|user| where(:user_id => user.id, :checked_out => true) }
于 2013-01-10T11:06:58.790 に答える