开发者

ActiveRecord :through to set default values on through table

I would like to set a default value in a has_many through association.

Lets say I have three models:

People

Friends

Dogs

A person can request that a dog becomes their friend.

So a person would create an association where friends has an active column = false.

User
  has_many :friends
  has_many :dogs, :through => :friends

Now when I assign a dog to a user

User.find(1).dogs << dog

The friends table has null in the active column.

My frie开发者_开发技巧nds model is defined as

Friend
  def initialize(args = {})
    super(args)
    active = false
  end

yet this does not work because the friend object is never created. Do I have to manually create one?


To set default values of a model; In the model I do this

    before_save :default_values

    private
    def default_values
      self.status = :active unless self.status
    end

Not sure if this is the correct approach though.


With the following code you'll create a new friend with active = false

class User < ActiveRecord::Base
  has_many :friends, :conditions => "active = false"
  has_many :dogs, :through => :friends
end

@user = User.new
@user.friends.create #or @user.friends.build
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜