使用Rails中的fixture来分配attr_accessor

时间:2012-12-05 10:24:36

标签: ruby-on-rails testing fixtures attr-accessor

我有一个简单的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

2 个答案:

答案 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}}