Before_create不工作

时间:2011-07-11 01:47:38

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

我有以下模型设置。但是从日志中我可以看出,变量在db中保存为null:

class Bracket < ActiveRecord::Base
  before_create :set_round_to_one

  def set_round_to_one
    @round = 1
  end
end

我通过使用类似的东西创建它:

bracket = Bracket.new(:name => 'Winners', :tournament_id => self.id)
bracket.save

我确实使用了create as new和save,但它也没有用。

3 个答案:

答案 0 :(得分:11)

假设roundbrackets表中的字段,您需要调用setter:

self.round = 1

这是因为round实际上是bracket的{​​{1}}哈希中的一个键,并且通过调用setter来正确设置Hash中的值。

此外,使用attributes,您只需在第一次调用时创建一个名为@round = 1的新实例变量。由于ActiveRecord不在实例变量中查找值(它在round Hash中查找),因此只要保存attributes的值就没有任何反应。

答案 1 :(得分:5)

应该是

class Bracket < ActiveRecord::Base
    before_create :set_round_to_one

    def set_round_to_one
        self.round = 1
    end
end

答案 2 :(得分:5)

Zabba和vinceh的解决方案都是正确的,但我建议您在数据库中为round的{​​{1}}属性设置默认值。