Ruby 有条件的似乎没有得到评估
在Rails 4项目中,我有两个这样设置的模型 student.rbRuby 有条件的似乎没有得到评估,ruby,ruby-on-rails-4,Ruby,Ruby On Rails 4,在Rails 4项目中,我有两个这样设置的模型 student.rb class Student < ActiveRecord::Base has_many :contracts def balance unpaid_contracts.sum(&:sum_total) end private def unpaid_contracts unpaid_contracts = [] contracts.each do |c| u
class Student < ActiveRecord::Base
has_many :contracts
def balance
unpaid_contracts.sum(&:sum_total)
end
private
def unpaid_contracts
unpaid_contracts = []
contracts.each do |c|
unpaid_contracts << c if c.unpaid? # This is the problem
end
end
end
class Contract < ActiveRecord::Base
has_many :invoices, dependent: :destroy
belongs_to :student
def unpaid?
return true if invoices.blank?
invoices.each do |i|
return true if i.current_status != "paid" && i.current_status != "rescinded"
end
end
end
class-Student 未支付的合同请注意您的回报值:
def unpaid_contracts
unpaid_contracts = []
contracts.each do |c|
unpaid_contracts << c if c.unpaid? # This is the problem
end
end
但这更好:
def unpaid_contracts
contracts.select(&:unpaid?)
end
你能试试下面的吗
私有方法仅适用于不打算使用类或类的实例的情况,因此请尝试将其删除
略为简洁的编码方式:
def unpaid_contracts
contracts.select { |contract| contract.invoices.count == 0}
end
正如@meagar所提到的,您没有返回正确的变量
您是否尝试过加载一个合同并使用.unpaid?
它会返回什么?该代码对我来说似乎是这样的contracts.select{| contract | contract.pending?}
感谢您对私有方法的指导!
def unpaid_contracts
contracts.select { |contract| contract.invoices.count == 0}
end