fields_for多态连接表

时间:2014-03-22 17:37:18

标签: ruby-on-rails polymorphic-associations

我正在为这些页面的内容创建一个带有Page模型和Blocks系统的自定义CMS。数据模型的简化视图是:

Page
has_many :blocks
has_many :text_blocks, through: :blocks, source: :blockable, source_type: "TextBlock", dependent: :destroy
has_many :image_blocks, through: :blocks, source: :blockable, source_type: "ImageBlock", dependent: :destroy

Block
belongs_to :page
belongs_to :blockable, polymorphic: true
accepts_nested_attributes_for :blockable

TextBlock
has_one :block, as: :blockable

ImageBlock
belongs_to :image
has_one :block, as: :blockable

在控制器中,我使用基于param的适当类型的可阻塞来设置@block。我正在尝试创建一个结构与此类似的表单:

=form_for @block do |f|
    <<<Block Attributes Here>>>

    =f.fields_for :blockable do |bf|
        = render bf.object.class_name.downcase.underscore + "_fields"

这会正确呈现表单,但是当我保存块时,它只设置blockable_type字段,并且不保存可阻塞或设置blockable_id。我发现让它工作的唯一方法是在create动作中手动创建blockable。这似乎不应该是必要的。我的应用程序也有类似的导航列表结构,所以我真的想找出为什么这没有工作没有感觉像“hackish”代码。任何想法将不胜感激!

1 个答案:

答案 0 :(得分:0)

这可能不起作用,但您是否尝试直接输出字段:

  =f.fields_for :blockable do |bf|
     = f.text_field :blockable

我查看了其他SO答案,看起来它是多态的--Rails应该为你做的工作

相关问题