список в rails — данные не отображаются в listbox при редактировании формы

#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 . Я отредактировал свой ответ. Это работает для вас сейчас?