#ruby-on-rails
#ruby-on-rails
Вопрос:
Я был бы очень признателен, если бы кто-нибудь мог пролить некоторый свет на это для меня.
В моем приложении Rails есть форма для создания новых книг.
class Book:
has_many :lnkbookauts, :foreign_key => "LSA_BOOK_FK", :dependent => :destroy
has_many :authors, :through => :lnkbookauts
class Author:
has_many :lnkbookauts, :foreign_key => "LSA_AUT_FK", :dependent => :destroy
has_many :books, :through => :lnkbookauts
В новой форме.html.erb пользователь может добавлять авторов, нажав на кнопку, которая отображает всплывающее окно. Пользователь выбирает авторов из этого всплывающего окна, а затем нажимает на кнопку, которая закрывает всплывающее окно и отображает выбранные имена авторов в поле списка, найденном в моей новой форме книги.
Все это делается с помощью javascript.
Нажатие кнопки «Сохранить книгу» сохраняет запись книги вместе с авторами.
Проблема в том, что когда я нажимаю на кнопку «Редактировать», я бы хотел, чтобы имена авторов отображались в окне списка в моей форме редактирования, но, к сожалению, в настоящее время это не так.
new.html.erb:
<p class="redLink">List of Authors:- <span><select size=5 id="book_author_ids" name="book[author_ids][]" multiple selected="true"> </select></span>
<br/>
<%= link_to add authors, new_author_path, :popup => ['new_window_name', 'height=400 px, width=500 px']%>
моя форма edit.html.erb также содержит тот же код для авторов.
Чего-то не хватает в форме редактирования?
Ответ №1:
Вам нужно указать редактирующей части, откуда читать options
для этого select
. Попробуйте поместить следующее внутри <select>...</select>
тега:
<%= options_from_collection_for_select(@book.authors, "id", "name") %>
(Где я предполагаю, что @book
для создания формы используется экземпляр Book, что вы хотите, чтобы id
для каждого Author
было value
поле параметра, и у этого Author
есть name
метод, который предоставит отображаемую строку.)
Смотрите здесь
Комментарии:
1. Большое спасибо за предложение, но теперь я получаю следующее сообщение об ошибке. неопределенный метод `map’ для #<Book:0x5c15f58>
2. На самом деле я не хочу отображать всех авторов в этом listbox .. я просто хочу отобразить авторов, которые были добавлены в книгу при ее первом создании.
3. редактирование авторов, связанных с книгой, выполняется через всплывающее окно. Поле списка в форме новой книги отображает только авторов, которые были выбраны во всплывающем окне
4. Черт возьми, допустил глупую ошибку в коде. Должно читаться
@book.authors
. Я отредактировал свой ответ. Это работает для вас сейчас?