我有一个简单的Rails 3模型,attr_accessor在数据库中没有字段,我需要使用fixture来设置它,因为我的初始化设置。
但是当我尝试它时,我收到有关未知列的错误。
还有其他办法吗?
我的模特:
class Timeslot < ActiveRecord::Base
attr_accessor :interval
after_initialize :init
def init
self.interval ||= 15
self.start_time ||= Time.local(0, 1, 1)
self.end_time = self.start_time.advance :minutes => self.interval
end
end
答案 0 :(得分:1)
Fixtures将数据直接添加到数据库中。如果您想将数据传递给模型,请考虑使用工厂(Factory Girl是一个很好的库)。
您可能已经对灯具进行了大量投资,但工厂非常值得一看。
答案 1 :(得分:1)
灯具是最终状态。意思是,在调用attr_accessor之后输出数据库中的内容。因此,如果您在end_time
等测试中使用@timeslot = timeslots(:your_name_of_fixture)
,则始终会为您计算after_initialize
。除了设置时,你不需要担心它们在夹具中。
现在,我之前没有见过before_save
,但我发现它是一个回调函数。对我来说,您在视图中设置间隔。可能不是以编程方式(除非那是默认的15分钟)。
切换到
class Timeslot < ActiveRecord::Base
attr_accessor :interval
before_save :set_times
def set_times
self.interval ||= 15
self.start_time ||= Time.local(0, 1, 1)
self.end_time = self.start_time.advance minutes: self.interval
end
end
回调(如果您希望您的员工也可以更改编辑时间间隔),例如:
{{1}}