0

モデルが初期化されるとすぐに、モデルの属性を設定しようとしています。before_initialise、after_initialise、before_create、after_create を試しました。

私は何を間違っていますか?

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

編集 次を使用してロタモデルを構築すると:

@rota = @user1.rotas.create(:current_turn => @user1.id)

それは機能します-しかし、私はコードを複製しているように感じます-私は常にcurrent_turnフィールドをオブジェクト作成者のIDにしたいと考えています。

ありがとう!

4

1 に答える 1

0

タイプミスがあります: に変更before_filterしてくださいafter_create

1)before_filterはコントローラーのコールバック関数です。

2)after_createユーザーが既に関連付けられており、関連付けを使用できるように使用したい。

于 2012-05-02T21:10:43.097 に答える