范围中的多个参数

时间:2013-01-10 10:34:59

标签: ruby-on-rails ruby-on-rails-3 scopes

对于你们大多数人来说这可能很简单,但是我还没有真正编写过多个具有多个参数的范围,单个参数很好,这里只是不确定。我正在尝试创建一个范围,上面写着“给我当前用户签出的所有书籍”

所以我在我的书模型中提出了这个问题

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

之前没有使用lambda,所以不确定我是否正确使用它,无论是哪种方式我都会收到错误

syntax error, unexpected keyword_end, expecting '}'

任何人都可以指出我正确的方向

修改

已将范围更改为

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

但现在我

错误的参数数量(0表示1) 感谢

3 个答案:

答案 0 :(得分:4)

我会这样做:

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

答案 1 :(得分:1)

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

答案 2 :(得分: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)

既然User has_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