如何将更新属性保存在联接表上有很多通过

时间:2019-04-30 11:31:40

标签: ruby-on-rails

我有3个模型WebinarParticipant,并加入Participant_webinar,这些模型与has_many through:相连

class Webinar < ApplicationRecord
  has_many :participant_webinars
  has_many :participants, through: :participant_webinars
class Participant < ApplicationRecord
  has_many :participant_webinars
  has_many :webinars, through: :participant_webinars
class ParticipantWebinar < ApplicationRecord
  belongs_to :webinar
  belongs_to :participant

  accepts_nested_attributes_for :participant

我需要在participant_webinar表中作为布尔值添加的用于连接的额外列(一些参与者订阅了网络研讨会,但没有参加)。

我不知道如何编辑或更新连接的属性

我尝试过使用嵌套属性,但是它不能保存或复制表中的字段:

<%= f.fields_for :participant_webinars do |ff| %>
  <%= ff.label :connected %>
  <%= ff.check_box :connected %>
<% end %>

我明白了:

participant_webinars: !ruby/hash:ActiveSupport::HashWithIndifferentAccess
           connected: '1'
           permitted: false
    converted_arrays: !ruby/object:Set
                hash:
                  *1: true
              commit: Update Participant
          controller: participants
              action: update
                  id: '1'
           permitted: false

即使我拥有允许的参数:

def participant_params
  params.require(:participant).permit(:first_name, :last_name, :email, :qualification, :city, :file, webinar_ids: [], particpant_webinars: [:id, :webinar_id, :participant_id, :notconnected])
end

首先,我创建了网络研讨会,然后在新参与者中有一个集合来选择网络研讨会,并且我还希望在与参与者连接的每个网络研讨会上都有一个用于连接的复选框。

1 个答案:

答案 0 :(得分:0)

已解决:

class Participant < ApplicationRecord

    has_many :participant_webinars
    has_many :webinars, through: :participant_webinars  
    accepts_nested_attributes_for :participant_webinars, 
    reject_if: proc { |attributes| attributes[:connected].blank? }, allow_destroy: true 

    validates :email, presence: true, uniqueness: {case_sensitive: false}

并进行编辑:

`<% if @participant.webinars.any? %>
<div class="form-group" >
    <div class="row" >
        <div class="col-sm-8 col-sm-offset-2" > <hr><hr> 
          <%= f.fields_for :participant_webinars do |d| %>
          <%= d.hidden_field :participant_id, value: @participant.id %>
          <%= render 'participants/participantconnected', d: d %>
          <% end %>
        </div>
    </div>
</div>
  <% end %>`

部分:

`<li class="list-group-item"><% webinar = d.object.webinar %>
<%= webinar.name %>&nbsp; 
<span class="pull-right"><%= d.check_box :connected %> Connected?</span></li>`