0

データベースにフィールドを持たないattr_accessorを使用した単純なRails3モデルがあり、初期化セットアップのため、フィクスチャを使用してセットアップする必要があります。

しかし、試してみると、不明な列についてエラーが発生します。

これを行う別の方法はありますか?

私のモデル:

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)。フィクスチャをセットアップするとき以外は、フィクスチャでそれらについて心配する必要はありません。

今、私は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 に答える