加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 具有多个表继承的嵌套表单

发布时间:2020-12-17 02:21:39 所属栏目:百科 来源:网络整理
导读:如何在rails中使用多表继承为对象构建嵌套表单?我正在尝试使用具有has_many关系的模型创建一个嵌套表单,以创建另一组具有多表继承的模型.我使用 formtastic和 cocoon作为嵌套表单,使用 act_as_relation gem来实现多表继承. 我有以下型号: class Product Ac
如何在rails中使用多表继承为对象构建嵌套表单?我正在尝试使用具有has_many关系的模型创建一个嵌套表单,以创建另一组具有多表继承的模型.我使用 formtastic和 cocoon作为嵌套表单,使用 act_as_relation gem来实现多表继承.

我有以下型号:

class Product < ActiveRecord::Base
 acts_as_superclass
 belongs_to :store
end

class Book < ActiveRecord::Base
     acts_as :product,:as => :producible
end

class Pen < ActiveRecord::Base
     acts_as :product,:as => :producible acts_as :product,:as => :producible
end

class Store < ActiveRecord::Base
    has_many :products
    accepts_nested_attributes_for :products,:allow_destroy => true,:reject_if => :all_blank
end'

对于此示例,本书与其他产品进行比较的唯一唯一属性是作者字段.实际上,我有很多独特的书籍属性,这就是为什么我选择多表继承而不是更普通的单表继承.

我正在尝试创建一个嵌套表单,允许您使用产品创建新商店.这是我的表格:

<%= semantic_form_for @store do |f| %>
  <%= f.inputs do %>
    <%= f.input :name %>

    <h3>Books/h3>
    <div id='books'>
    <%= f.semantic_fields_for :books do |book| %>
      <%= render 'book_fields',:f => book %>
    <% end %>
          <div class='links'>
      <%= link_to_add_association 'add book',f,:books %>
      </div>

  <% end %>
<%= f.actions :submit %>
<% end %>

而book_fields部分:

<div class='nested-fields'>
  <%= f.inputs do %>
    <%= f.input :author %>
    <%= link_to_remove_association "remove book",f %>
  <% end %>
</div>

我收到此错误:

undefined method `new_record?' for nil:NilClass

基于阅读act_as_relation的github页面上的问题,我想到了使商店和书籍之间的关系更加明确:

class Product < ActiveRecord::Base
 acts_as_superclass
 belongs_to :store
 has_one :book
 accepts_nested_attributes_for :book,:reject_if => :all_blank
end

class Book < ActiveRecord::Base
     belongs_to :store
     acts_as :product,:as => :producible
end

class Store < ActiveRecord::Base
        has_many :products
        has_many :books,:through => :products
        accepts_nested_attributes_for :products,:reject_if => :all_blank
        accepts_nested_attributes_for :books,:reject_if => :all_blank
    end

现在,我得到一个无声的错误.我可以使用表单创建新的商店,而cocoon允许我添加新的书籍字段,但是当我提交时,商店被创建而不是子书.什么时候,我通过`/ books / new’路线,我可以创建一个跨越(产品和书籍表)的新书记录没有问题.

这个问题有解决方法吗?其余的代码可以在here找到.

解决方法

也许你可以:

>在stores_controller #new动作上手动构建书籍关系

@ store.books.build
>手动存储关于stores_controller #create动作的关系

@ store.books …(对如何实现它并不是很有信心)

让我们发布.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读