#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;