【问题标题】:Ruby on Rails using check_box_tag with nested attributes and has_manyRuby on Rails 使用带有嵌套属性和 has_many 的 check_box_tag
【发布时间】:2014-08-22 16:27:03
【问题描述】:

我有 4 个模型

class Contract < ActiveRecord::Base

  has_many :addendums
  accepts_nested_attributes_for :addendums
end

class Addendum < ActiveRecord::Base

  belongs_to :contract
  has_many :addendum_services
  has_many :services, through: :addendum_services
end

class AddendumService < ActiveRecord::Base
  belongs_to :addendum
  belongs_to :service
end

class Service < ActiveRecord::Base
  has_many :addendum_services
end

我正在使用嵌套属性通过合同的表单构建附录,它适用于所有附录的属性,但我还希望用户使用check_box_tag 选择要使用的服务列表。由于Addendum 没有addendum_services 的属性,我应该在Contract 的强参数中添加什么才能接受服务列表?另外,如何在表单上生成服务列表?我目前正在使用这个:

<%= form_for(@contract) do |f| %>
  ...
  <%= f.fields_for :addendums do |addendums_form|%>
    <%= addendums_form.label 'Services'%><br>
    <% for serv in Service.all %>
    <%= check_box_tag "service[]", serv, @addendum.services.include?(serv) %>
    <%= serv %><br>
<% end %>

但它不起作用......

【问题讨论】:

    标签: ruby-on-rails checkbox nested-attributes has-many-through


    【解决方案1】:

    我正在使用类似的方法,但使用的是文档和类别。

    将文档视为服务

    class Document < ActiveRecord::Base
      has_many :categorisations
      has_many :categories, :through => :categorisations
    

    类别和附录

    class Category < ActiveRecord::Base
      has_many :categorisations
      has_many :documents, :through => :categorisations
    

    和一个 AddendumService 一个分类

    class Categorisation < ActiveRecord::Base
      belongs_to :document
      belongs_to :category
    

    注意:您缺少 Service 的直通方法

    has_many addendum, :through => :addendum_services 
    

    另外,我的复选框如下;

      - Category.all.in_groups_of(3,false) do |category_list|
        %tr
          - for categories in category_list
            %td
              = check_box_tag "categorisation[category_ids][]", categories.id, @document.categories.include?(categories)
              %label= categories.title
    

    注意“categorisation[category_ids][]”而不是“service[]”->也许你需要“addendum_service[:service][]”?

    希望这能让你调整你的代码,或者说我愚蠢并增强我的发展。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-06-21
      • 2018-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-03
      相关资源
      最近更新 更多