Before_create不工作

agm*_*eod 5 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
Run Code Online (Sandbox Code Playgroud)

我通过使用这样的东西创建它:

bracket = Bracket.new(:name => 'Winners', :tournament_id => self.id)
bracket.save
Run Code Online (Sandbox Code Playgroud)

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

Zab*_*bba 11

假设round你是brackets表中的一个字段,你需要调用setter:

self.round = 1

这是因为,round实际上是一个钥匙插入bracketattributes哈希,并通过调用该哈希值是否设置正确的制定者.

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


vin*_*ceh 5

它应该是

class Bracket < ActiveRecord::Base
    before_create :set_round_to_one

    def set_round_to_one
        self.round = 1
    end
end
Run Code Online (Sandbox Code Playgroud)


Ray*_*ter 5

Zabba和vinceh的解决方案都是正确的,但我建议您在数据库中为round属性设置默认值,而不是之前的创建Bracket.