モデルの属性を初期化するとすぐに設定しようとしています。私はbefore_initialise、after_initialise、before_create、after_createを試しました。Rails:初期化時にmodel's属性を設定する方法
私は間違っていますか?
describe "turn based system" do
before(:each) do
@user1 = Factory :user
@user2 = Factory :user
@rota = @user1.rotas.create
@rota.users << @user2
end
it "should be user1's turn at the beginning" do
@rota.current_turn.should == @user1.id --> fails
end
実装:
class Rota < ActiveRecord::Base
has_many :rotazations
has_many :users, :through => :rotazations
has_many :invitations
after_create :set_current_turn
private
def set_current_turn
if self.users.count > 0
self.current_turn = self.users[0].id
end
end
end
EDIT 私が使用してロタのモデルを構築した場合:
@rota = @user1.rotas.create(:current_turn => @user1.id)
が、それは動作します - しかし、私はコードを複製イムように感じる - 私はいつもしたいですcurrent_turnフィールドはオブジェクト作成者のIDになります。
ありがとうございます!
確かにself.users.count> 0ですか? – c0deNinja
私はかなりわかりません - 効果的に@ user1.rotas.create - その特定のロータについては、ユーザー数は1(多対多の関係から)でなければなりません。ただし、set_current_turnが呼び出されたときに1ではない可能性があります。どのようにコードを変更して、ロータを作成するユーザーのIDがcurrent_turn – Karan