Rails 3 MySQL查询问题

时间:2011-03-04 05:01:25

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

我的作业模型包含 ID 百分比字段(以及其他字段)。 百分比可能是nil

我想在此处设置默认百分比

class JobsController
  def new
    ...
    @job.percentage = <what should be here?>
    ...
  end
end

应该像这样计算:

  • 获取最新作业(最高 ID 的作业)的百分比,百分比不是nil
  • 如果没有工作,或者百分比的所有工作都是nil,则应为23。

最简单的计算方法是什么?

2 个答案:

答案 0 :(得分:2)

您应该在Job模型中执行此操作:

[更新]

在回调中添加了new_record?的测试,因为百分比可以合法地为nil;如果之前已经设置过,我们不想覆盖它。

class Job < ActiveRecord::Base
  after_initialize :calculate_default_percent

  # other stuff

  private

    def calculate_default_percent
      if self.new_record?
        conditions = { :conditions => "percentage NOT NULL" }
        self.percentage = Job.last(conditions).nil? ? 23 : Job.last(conditions).percentage
      end
    end
end

答案 1 :(得分:1)

您必须根据需要编写命名范围以查找最近的记录。

named_scope :recent, :conditions => "percentage != '' && 
             percentage IS NOT NULL", :order => 'ID DESC', :limit => 1

####Before Save

def calculate_default_percent
  record = Job.recent.first
  self.percentage ||= (record.nil? ? 23 : record.percentage)
end