簡體   English   中英

Rails為關聯模型形成多個復選框

[英]Rails form multiple checkboxes for associated model

我正在創建一個應用程序,其中可以使用創建客戶端詳細信息的表格進行“提交”,並根據可以提供所需服務的分支機構創建“引薦”

class Submission < ActiveRecord::Base
  has_many :referrals, :inverse_of => :submission, dependent: :delete_all
  accepts_nested_attributes_for :referrals, :allow_destroy => true
end

class Referral < ActiveRecord::Base
  belongs_to :submission
end

class Branch < ActiveRecord::Base
  has_many :referrals
end

提交控制器:

def new
  @submission = Submission.new
  @submission.build_client
  @submission.client.build_address
  @submission.referrals.build
end

def submission_params
  params.require(:submission).permit(:consent, :user_id, client_attributes:
    [:client_id, :first_name,
      address_attributes:
        [:first_line, :second_line,]
    ],
    referrals_attributes:
      [:branch_id]
  )
end

提交表格:

<%= form_for(@submission) do |f| %>
  <%= f.fields_for :referrals do |referral| %>
    <%= render 'referral_fields', f: referral %>
  <% end %>
<% end %>

_referral_fields.html.erb:

    <% Branch.all.where(referrable: true).each do |branch| %>
       <label>
          <%= check_box_tag 'branch_ids[]', branch.id %>
          <%= branch.name %>
       </label>
    <% end %>

我想要的是每個可引用分支都具有復選框。 選中一個分支並創建提交后,將為該分支創建引薦。 但是,當我提交表單時,出現“引用不能為空”的驗證錯誤。 知道為什么這行不通嗎?

任何幫助是最感激的

使用collection_check_boxes

<% # _referral_fields.html.erb %>
<%= f.collection_check_boxes(:branch_ids, Branch.where(referrable: true), :id, :name) do |b|
  b.label { b.check_box } # wraps check box in label
end %>

您需要將submission[referrals_attributes][branch_ids]列入白名單,而不是branch_id

def submission_params
  params.require(:submission)
    .permit(
      :consent, 
      :user_id, 
      client_attributes: [
        :client_id, 
        :first_name,
        address_attributes: [
          :first_line, :second_line,
        ]
    ],
    referrals_attributes: [:branch_ids]
  )
end

編輯。

但是,要執行此操作,您需要在引薦和分支之間建立關系。 在這種情況下,您可以使用has_and_belongs_to_manyhas_and_belongs_to_many )或has_many though: (HMT)關系。

請參見在has_many:through和has_and_belongs_to_many之間選擇

class Referral < ActiveRecord::Base
  belongs_to :submission
  has_and_belongs_to_many :branches
end

class Branch < ActiveRecord::Base
  has_and_belongs_to_many :referrals
end

您還需要創建一個聯接表:

rails g migration CreateBranchReferralJoinTable branch referral

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM