Как включить таблицу соединений рельсов в форму

#ruby-on-rails #ruby

#рубин на рельсах #рубин

Вопрос:

Моя форма успешно создаст ассоциации, но есть одна небольшая проблема: в моей show таблице есть атрибут с именем name . Когда я отправлю форму и введу @club.shows в консоль, шоу name будет отображаться как nil . Вот результат:

 id: 1,  name: nil,  club_id: 1,  deejay_id: 1,  created_at: Mon, 06 Dec 2021 22:06:11.840444000 UTC  00:00,  updated_at: Mon, 06 Dec 2021 22:06:11.840444000 UTC  00:00gt;]  

Мой код:

club.rb

 class Club lt; ApplicationRecord  has_many :shows  has_many :deejays, through: :shows  accepts_nested_attributes_for :deejays end  

show.rb

 class Show lt; ApplicationRecord  belongs_to :club  belongs_to :deejay end  

deejay.rb

 class Deejay lt; ApplicationRecord  has_many :shows  has_many :clubs, through: :shows end  

clubs_controller.rb

 class ClubsController lt; ApplicationController    def new   @club = Club.new  end   def index  @clubs = Club.all  end   def create   @club = Club.create(club_params)  binding.pry  if @club.save  redirect_to clubs_path  end  end   private   def club_params  params.require(:club).permit(:name, deejays_attributes: [:id, :name, :age])  end  end  

_form.html.erb

 lt;h1gt; Step 1: Create a Club and Add a Deejay lt;/h1gt;  lt;%= form_for(@club) do |f| %gt;  lt;div class="field"gt;  lt;%= f.text_field :name, placeholder: "Club Name" %gt;    lt;%= f.fields_for :deejays, @club.deejays.build do |deejay| %gt;  lt;brgt;  lt;%= deejay.text_field :name, placeholder: "Deejay Name" %gt;  lt;%= deejay.text_field :age, placeholder: "Deejay Age" %gt;  lt;% end %gt;  lt;brgt;   lt;%= f.fields_for :shows, @club.shows.build do |show| %gt;  lt;%= show.text_field :name, placeholder: "Show Name" %gt;  lt;% end %gt;  lt;brgt;   lt;%= f.submit %gt;  lt;/divgt; lt;% end %gt;  

Что я пытался: Я попытался добавить accepts_nested_attributes_for :shows в свой club.rb , а также добавить params.require(:club).permit(:name, deejays_attributes: [:id, :name, :age], shows_attributes: [:id, :name]) в свой clubs_controller , но это результат, который я получаю:

 [#lt;Show:0x000000010c4b2140 id: nil, name: "EDC", club_id: nil, deejay_id: nil, created_at: nil, updated_at: nilgt;]  

Как вы можете видеть, в этом случае теперь отображается name атрибут «EDC», но теперь id , club_id , и deejay_id есть nil . Как я могу исправить эту проблему, чтобы атрибут show » s name » не отображался как nil ?

Комментарии:

1. Мои параметры клуба: params.require(:club).permit(:name, deejays_attributes: [:id, :name, :age], shows_attributes: [:id, :name]) Вывод: #lt;ActionController::Parameters {"name"=gt;"Omnia", "deejays_attributes"=gt;#lt;ActionController::Parameters {"0"=gt;#lt;ActionController::Parameters {"name"=gt;"Tiesto", "age"=gt;"55"} permitted: truegt;} permitted: truegt;, "shows_attributes"=gt;#lt;ActionController::Parameters {"0"=gt;#lt;ActionController::Parameters {"name"=gt;"EDC"} permitted: truegt;} permitted: truegt;} permitted: truegt;