Вложенные модели и формы с одним сквозным отношением в Rails - PullRequest
1 голос
/ 29 марта 2012

Я пытаюсь настроить форму, которая принимает некоторую информацию о песне.Прямо сейчас название песни и исполнитель песни.

Вот мой код.

Модель песни * EDIT

class Song < ActiveRecord::Base

  has_one :song_artist_map
  has_one :artist, :through => :song_artist_map
  accepts_nested_attributes_for :artist

end

Модель исполнителя

class Artist < ActiveRecord::Base
  has_many :song_artist_maps
  has_many :songs, :through => :song_artist_maps
end

SongArtistMap Model

class SongArtistMap < ActiveRecord::Base
  belongs_to :song
  belongs_to :artist
end

Контроллер песен

def new 
  @song = Song.new
  @song.artist.build
end

И внутри своей формы я добавил этот код

<% f.fields_for :artist do |a| %>
    <li><%= a.label :name %></li>
    <li><%= a.text_field :name %></li>
<% end %>

Прямо сейчас ничего не отображается вмоя форма для художников.

Поэтому мне нужен способ, чтобы иметь возможность добавить Исполнителя из формы при добавлении песни, а затем выполнить сопоставление или просто сопоставить, если исполнитель уже существует в моей базе данных.

Я знаю, что я делаю что-то очень неправильно, кто-нибудь может помочь?Спасибо!

1 Ответ

1 голос
/ 29 марта 2012

В вашей модели Song должно быть has_many: Artist?

Если вы делаете

"artist".pluralize
 => "artists" 

Это то, что Rails использует для автоматического поиска нескольких вещей, особенно с has_manyотношения, так что это может быть источником ваших проблем.

РЕДАКТИРОВАТЬ

В этом случае проблема в вашем контроллере.Вместо @ song.artist.build у вас должен быть @ song.build_artist.

При наличии отношения has_many Rails использует объект, который позволяет создавать новые экземпляры, с has_one он просто возвращает его (может быть ноль.).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...