Rails通过关联激活has_many的管理员

时间:2012-03-13 15:30:21

标签: ruby-on-rails ruby-on-rails-3 forms has-many-through activeadmin

如何在active_admin表单中显示连接模型的额外属性(在has_many中通过关联)?

f.input :ad_slots

只会显示ad_slots模型,但我有一个名为stream_slots的连接表,它有一个名为duration的额外列。我希望能够选择ad_slot并输入持续时间。

这些是模型:

#live_stream:
has_many :stream_slots, :dependent => :destroy
has_many :ad_slots, :through => :stream_slots

#ad_slot:
has_many :stream_slots, :dependent => :destroy
has_many :live_streams, :through => :stream_slots

#stream_slot:
belongs_to :ad_slot
belongs_to :live_stream

和stream_slot具有其他两个模型的ID以及称为持续时间的额外属性。

谢谢。

- 尝试了别的事情 -

而不是链接到ad_slots,这就是我所做的:

f.has_many :stream_slots do |association|
  association.inputs do 
    association.input :ad_slot
    association.input :duration
  end

在LiveStream类中,我添加了:

accepts_nested_attributes_for :stream_slots

这样,表单显示ad_slots供我选择,以及extra属性的文本字段,但是,当我尝试保存它时失败。我相信我知道问题是什么,但我不知道如何解决它。这是因为stream_slots表中的live_stream_id为空。如何将其设置为新创建的live_stream? (我现在创造的那个......)

任何帮助将不胜感激..

1 个答案:

答案 0 :(得分:1)

我得到了它的工作,正如问题中提到的那样,问题在于提交表单时,live_stream_id是空的。

所以我刚刚删除了stream_slot模型中的验证,该模型说明live_stream_id必须存在且有效。

不确定这是否是最好的方法..但它现在正在工作。

如果有人有更好的解决方案,请分享。