在我的Rails 4应用程序中,我有复选框,我需要它们在刷新页面后保持其状态(选中或取消选中),直到用户更改状态。
这是我的代码有:页面刷新后需要检查复选框
<% @album.audios.each do |audio| %>
<%= check_box_tag "audio_ids[]",audio.id ,nil,class: "song"%>
<% end %>
我坚持这一点。有什么更好的方法来做到这一点?我可以在这里使用会话吗?
在我的Rails 4应用程序中,我有复选框,我需要它们在刷新页面后保持其状态(选中或取消选中),直到用户更改状态。
这是我的代码有:页面刷新后需要检查复选框
<% @album.audios.each do |audio| %>
<%= check_box_tag "audio_ids[]",audio.id ,nil,class: "song"%>
<% end %>
我坚持这一点。有什么更好的方法来做到这一点?我可以在这里使用会话吗?
您将在您的查看代码中通过零位代码。您应该为checked元素传递true,在非checked元素上传递false。
<% for audio in @album.audios %>
<%= check_box_tag "audio_ids[]",audio.id ,(true/false),class: "song"%>
<% end %>
下面是复选框标记语法:
check_box_tag(name, value, checked, html_and_other_options)
如果你想坚持的复选框的状态,你要么需要设置在session
的数据,或者不知何故,扎入ActiveRecord object
为您的表单。
我会约形式的第一细节...
表
您目前的设置是你正在使用form_tag
你必须知道form_tag
之间的差异form_for
是前者具有独立数据,而后者的数据来自ActiveRecord对象。对很多人来说这个问题是因为他们不知道其中的差别,他们很可能会与如何实施这两种方法相混淆,这可能是一个问题。
我会建议使用form_for
:
#app/views/albums/edit.html.erb
<%= form_for @album do |f| %>
<% @album.audios.each do |audio| %>
<%= fields_for 'audio[]', audio do |audio_fields| -%>
<%= audio_fields.check_box nil %>
<% end %>
<% end %>
<%= f.submit %>
<% end %>
大参考这里:Syntax for form_for when building an array from checkboxes
另一种方法可能是collection_check_boxes
:
#app/views/albums/edit.html.erb
<%= form_for @album do |f| %>
<%= f.collection_select_boxes :audio_ids, @album.audios, :id, :name %>
<%= f.submit %>
<% end %>
注意有关该 “办法” 最重要的是由于复选框的值直接与您的ActiveReco @album
rd对象,它使您能够通过将数据保存到数据库来“坚持”数据。
我不知道你想用当前的设置实现什么,但要坚持数据 - 即使在视图之间 - 你需要确保你有一个地方可以保存数据(DB或像一个cookie)
会议
会议将是这一个合乎逻辑的选择,尽管你还没有说你希望达到什么样的,我不知道他们在哪里会适应。
如果您的表单要“提交”,您可以在发送请求的控制器操作中设置数据的“会话”cookie。例如,如果你发送请求到albums#update
,你会想会话存储在行动:
#app/views/albums/edit.html.erb
<% @album.audios.each do |audio| %>
<%= check_box_tag "audio_ids[]", audio.id, session[:album_ids][audio.id], class: "song"%>
<% end %>
#app/controllers/albums_controller.rb
class AlbumsController < ApplicationController
def update
session[:album_ids] = params[:album_ids]
@album = Album.find params[:id]
@album.audios.each do |audio|
session[:album_ids][audio.id] = params[:album_ids][audio.id]
end
end
end
无国籍
最后,你想看看到"stateless"协议的工作(其中HTTP非常多)。这很重要,因为通过“无状态”,应用程序不会影响数据提交的地点或时间 - 实质上它将每个资源视为一个个体。
您的问题是,您必须持续存在您的数据 - 只有在您有方法将用户的身份(会话)与他们提交的数据或要检索的数据相匹配时才会发生。
对于您的情况,您需要使用session
Cookie或ActiveRecord对象来查找您提交的数据。
感谢您在这个链接的详细解答我已经给予我详细的需求看到,谢谢你Rich Peck http://stackoverflow.com/questions/25930992/music-player-select-some-songs-and-play-in-rails – Navin 2014-09-19 09:46:03
@Maddy当有人讲述自己时,它必须是“我”,而不是“我”。 – Regent 2014-09-19 04:42:01