我有以下代码(工作)来创建播放列表:
控制器:
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字段(如果有多个具有相同名称的播放列表)。如有必要,我将在此处包含完整的先行代码。我正在尝试按以下行更新播放列表(基于此前一个问题:Problems keeping an object in an array, Ruby issues and Rails issues)
我的主要问题是尝试将用户选择的播放列表的ID传递给rails表单(rails是服务器端,并且没有像jQuery这样的客户端方法的能力来获取文本字段值,据我了解) 。 update_attribute
和update_column
方法似乎仅限于通过(name, value)
,我无法弄清楚如何通过ID以便我可以将新歌推送到现有播放列表content
数组。
答案 0 :(得分:1)
将您在客户端收集的ID传递给
f.hidden_field
在表单内。然后将其与其他参数一起提交给控制器。
如果您希望他们获取ID,您可能会错误地使用update_attribute
和update_column
。进入控制器后,update_attribute用于将数据更新到模型中,而不是从表单中检索数据。
编辑:正如聊天中所讨论的,实现您想要实现的目标(即从单个表单创建和更新)的一种方法是在您的AJAX调用之后使用播放列表ID填充隐藏字段以进行检查如果播放列表已存在。
当它到达您的控制器时,您可以使用此ID作为确定是创建新播放列表还是更新现有模型的基础。
使用同一页面搜索播放列表然后创建或更新的一个难点是,在更新现有播放列表的情况下,您可能需要进行适当的调用以使用预先存在的歌曲列表更新表单播放列表详细信息。