对于你们大多数人来说这可能很简单,但是我还没有真正编写过多个具有多个参数的范围,单个参数很好,这里只是不确定。我正在尝试创建一个范围,上面写着“给我当前用户签出的所有书籍”
所以我在我的书模型中提出了这个问题
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) 感谢
答案 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