我有以下模型设置。但是从日志中我可以看出,变量在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,但它也没有用。
答案 0 :(得分:11)
假设round
是brackets
表中的字段,您需要调用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}}属性设置默认值。