0

我有一个简单的 Rails 3 模型,它的 attr_accessor 在数据库中没有字段,由于我的初始化设置,我需要使用固定装置进行设置。

但是当我尝试它时,我收到关于未知列的错误。

还有另一种方法可以做到这一点吗?

我的模型:

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
4

2 回答 2

2

夹具是最终状态。这意味着,在您调用 attr_accessor 之后,您的数据库中的内容将被输出。如果end_time您在像@timeslot = timeslots(:your_name_of_fixture). 您无需在 Fixture 中担心它们,除非您在设置它时。

现在,我以前没有见过after_initialize,但我看到它是一个回调函数。对我来说,您是在视图中设置间隔。可能不是以编程方式(除非它是默认的 15 分钟)。

切换到before_save回调(如果您希望您的人员也能够在编辑时更改间隔),例如:


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
于 2012-12-16T12:45:42.340 回答
1

夹具将数据直接添加到数据库中。如果您想将数据传递给模型,请考虑使用工厂(Factory Girl是一个很好的库)。

您可能已经在固定装置上进行了大量投资,但工厂非常值得一看。

于 2012-12-05T11:06:19.213 回答