How do you update one object of a has_many :through relationship

Hi guys.

How do you update nested attributes for one object of a has_many :through relationship? So I have an entity model and this model can have many fact_values. The difference between fact and fact_value is that the latter has an extra value attribute. This is because facts can be common among many entities, but each entity can have its own unique value for a specific fact. So my models are the following:

class Entity   has_many :fact_values   has_many :facts, :through => :fact_values end

class FactValue   belongs_to :entity   belongs_to :fact end

class Fact   has_many :fact_values   has_many :entities, :through => :fact_values end

Now I've specified that Entity accepts_nested_attributes_for :fact_values. But I want it to accept nested attributes for a single (pre-defined) fact_value and update only that fact_value. The way I'm going about it right now is to have a virtual attribute in my Entity model representing that one fact_value and update that fact_value in the entity controller. I'm wondering if there is any automatic way to accomplish what I'm trying to do?

Thanks!

I'm not sure exactly what the problem is. If you only want to update one object, you only put that object in the fields_for(:fact_values) part of the form. If you're worried about the wrong object being created/updated through accepts_nested_attributes, then the :reject_if can enable you to add validation.

Perhaps something along the lines of

class Entity

  has_many :fact_values   has_many :facts, :through => :fact_values   belongs_to :anointed_fact_value

   accepts_nested_attributes_for :fact_values, :reject_if => :not_updatable_fact_value

   def not_updatable_fact_value(attrs)       attrs[:id] != anointed_fact_value_id    end end

I’m using formtastic, I see that it seems simple enough with the standard rails forms. I suppose I can ask on a formtastic gorup to see what they say.

Thanks