在我的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