Rails:如何在初始化时设置模型的属性

时间:2012-05-02 20:37:51

标签: ruby-on-rails rspec initialization

我正在尝试在初始化时立即设置模型的属性。我尝试过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模型
@rota = @user1.rotas.create(:current_turn => @user1.id)

它有效 - 但是,我觉得我在复制代码 - 我总是希望current_turn字段成为对象创建者的id。

谢谢!

1 个答案:

答案 0 :(得分:0)

您有拼写错误:将before_filter更改为after_create

1)before_filter是控制器回调函数。

2)您想使用after_create,因此用户已经关联,您可以使用该关联。