Rails - Обновление атрибута / столбца (добавление новой песни в массив списка воспроизведения)

0

У меня есть следующий код (рабочий) для создания плейлистов:

контроллер:

def create
@playlist = current_user.playlists.build(playlist_params)
if @playlist.save

  redirect_to root_url
else
  redirect_to root_url
end
end


def destroy
end

private

def playlist_params
  params.require(:playlist).permit(:content, :name)
end

Посмотреть:

<%= form_for(@user.playlists.create, remote:true) do |f| %>

  <%= f.text_field :content, id: "playlistContent", :validate => true  %>
  <%= f.text_field :name, id: "playlistName", placeholder: "Enter Playlist Name", :validate => true %>

  <%= f.submit "Save Playlist", id: "savePlaylist", remote:true %>
<% end %>

Теперь я хочу разрешить пользователю добавлять новую композицию в content плейлиста. Я использую typeahead, где пользователь вводит имя списка воспроизведения, и, выбирая имя, он заполнит поле скрытого идентификатора идентификатором списка воспроизведения (в случае нескольких списков воспроизведения с тем же именем). Если необходимо, я включу здесь полный код типа. Я пытаюсь обновить список воспроизведения в следующих строках (на основе этого более раннего вопроса: проблемы с сохранением объекта в массиве, проблемы с Ruby и проблемы с Rails)

Моя основная проблема заключается в попытке пройти идентификатор плейлиста, который пользователь выбирает для формы рельсов (рельсы являются серверной частью и не имеют возможности клиентских методов, таких как jQuery, чтобы получить значение текстового поля, насколько я понимаю). update_attribute и update_column кажутся ограниченными для прохождения через (name, value), и я не могу понять, как пройти через идентификатор, чтобы я мог пропустить новую песню в существующий массив content списка воспроизведения.

  • 0
    Единственное, на что нужно обратить внимание: на самом деле create создает запись. Вы, вероятно, не хотите, чтобы это происходило в вашей form_for .
  • 0
    Да, для моего def update в контроллере у меня есть @playlist = Playlist.find(params[:id]) , но я выбираю :id стороне клиента с typeahead + JSON, и где у меня возникают трудности при передаче идентификатора в form-for . Я пытался, чтобы скрытое поле предшествовало помощнику form_for чтобы я мог передать идентификатор в качестве аргумента, но получить различные ошибки (например, 0 аргументов для 2 или не могу найти ID = id).
Теги:
activerecord
form-for

1 ответ

1

Передайте идентификатор, который вы собираете на стороне клиента, в

f.hidden_field 

внутри вашей формы. Затем он будет передан контроллеру вместе с другими параметрами.

Возможно, update_column неправильно используете update_attribute и update_column если ожидаете получить идентификатор. Когда вы находитесь в контроллере, update_attribute используется для обновления данных в модели, а не для извлечения данных из формы.

Изменение: Как обсуждалось в чате, один из способов сделать то, что вы пытаетесь достичь (т.е. Создать и обновить из одной формы), - это иметь скрытое поле, которое вы заполняете идентификатором списка воспроизведения после вызова AJAX, чтобы проверить, есть ли список воспроизведения уже существует.

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

Одна из трудностей с использованием одной и той же страницы для поиска списка воспроизведения, а затем создания или обновления заключается в том, что в случае обновления существующего списка воспроизведения вам может потребоваться сделать соответствующие звонки, чтобы обновить форму с уже существующим списком песен и подробностями списка воспроизведения.

  • 0
    Да, я должен был быть более ясным, у меня уже есть скрытое поле для идентификатора, моя проблема в том, что я не могу понять, как передать значение из этого скрытого поля в контроллер, чтобы обновить список воспроизведения с определенным идентификатором. Я использую typeahead + JSON для создания страницы .json с соответствующими значениями для ввода typeahead, но поскольку это на стороне клиента, я не знаю, как передать это в форму рельсов, где я хочу обновить столбец для списка воспроизведения с определенным идентификатором.
  • 0
    Вам нужно будет сделать некоторую форму обратной записи. Если вы задаете его в форме как скрытое поле, оно будет доступно контроллеру после того, как пользователь отправит форму. то есть params ['my_hidden_field']. Если вы еще не отправили эту форму, вам, скорее всего, понадобится какой-то пост AJAX, который представляет собой другой способ представить вашу страницу.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню