我有以下代码(工作)来创建播放列表:
控制器:
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
添加一首新歌。我使用提前输入,其中用户输入播放列表名称,并在选择名称后,它将填写一个隐藏的ID字段与播放列表ID(在多个播放列表具有相同的名称的情况下)。如果有必要,我将在这里包括完整的预输入代码。我试图沿着以下路线更新播放列表(基于这个早期的问题:在数组中保持对象的问题,Ruby问题和Rails问题)
我的主要问题是试图通过用户选择到rails表单的播放列表的ID, (rails是服务器端,没有像jQuery这样的客户端方法的能力,以获得我所理解的文本字段值)。update_attribute
和update_column
方法似乎仅限于通过(name, value)
,我不知道如何通过ID,这样我就可以将新歌推送到现有的播放列表content
数组。
将您在客户端收集的ID传递到
f.hidden_field
在您的表单中。然后,它将与其他参数一起提交给控制器。
你可能使用update_attribute
和update_column
不正确,如果你期望他们得到的ID。进入控制器后,update_attribute用于将数据更新到模型中,而不是从表单中检索数据。
编辑:正如在聊天中所讨论的,一种方法来做什么,你试图实现(即创建和更新从一个单一的形式)是有一个隐藏的字段,您填充与播放列表ID以下AJAX调用检查播放列表是否已经存在。
当它到达您的控制器时,您可以使用此ID作为确定是否创建新播放列表或更新现有模型的基础。
使用同一页面搜索播放列表然后创建或更新的一个困难是,在更新现有播放列表的情况下,您可能需要使用已有的歌曲列表和播放列表详细信息进行适当的调用来更新表单。