【问题标题】:Return only available items in Ruby on Rails仅返回 Ruby on Rails 中的可用项目
【发布时间】:2009-09-25 03:18:12
【问题描述】:

我创建了一个允许我返回所有书籍的方法。我想把归还的书限制在那些没有借出的书上。我需要添加什么到 available_books 以确保只归还未借出的书籍。我可以利用我已有的贷款吗?方法?

class Book < ActiveRecord::Base
  has_many :book_loans
  has_many :borrowers, :through => :book_loans, :source => :person

  def loaned?
    book_loans.exists?(:return_date => nil)
  end

  def self.available_books
    @books = find(:all, :order => "title")
  end
end

【问题讨论】:

    标签: ruby-on-rails list


    【解决方案1】:

    您可以修改您的查找使其看起来像这样:

    find(:all, :select => "books.*", :joins => :book_loans, :conditions => ['book_loans.return_date is null'], :order => "title")

    【讨论】:

      【解决方案2】:

      首先,您可能要考虑使用命名范围来定义方法,例如,您编写的 available_books 方法可以重写为

      named_scope :available_books, :order => "title"
      

      这将允许您以与您相同的方式编写 Book.available_books,但此外,您可以链接多个命名范围,例如 Book.available_books.by_author("bob") (假设您定义了另一个名为 by_author 的命名范围将名称作为参数。

      要检查它是否被借出,您可以尝试以下操作:

      named_scope :loaned, :joins => :book_loans, :conditions => { :book_loans => { :return_date => nil } }
      

      或者,您应该能够以与文森特相同的方式使用字符串作为条件。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-10-28
        • 1970-01-01
        • 2013-06-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多