如果设置了 cookie,如何在我的 select 菜单中预 select 一个值?
HOw do I pre-select a value in my select menu if a cookie is set?
我正在使用 Rails 4.2.3。我的页面中有这个 select 表单域……
<%= f.label :object %><br>
<div class="styled-select"><%= collection_select(:user_object, :object, @objects, :id, :description, {:prompt => true}) %></div>
我的问题是,如果存在名为“object”的 cookie,我该如何预先 select 一个值?我想将 select 菜单的值设置为 cookie 的值。请注意,如果此视图由我的控制器的“索引”操作提供服务,我只想预 select 值(以上是不同控制器方法提供的部分视图的一部分)。
谢谢,-戴夫
如果你想让某个对象被默认选中,你可以使用:selected
假设您的 cookie 对象存储一个 id
{:selected => object}
<%= collection_select(:user_object, :object, @objects, :id, :description, {:prompt => true}, {:selected => object} ) %>
在您的索引控制器中获取 cookie 值,
def index
@selected_object = cookies[:some_key]
end
在你的Index.html.erb
<div class="styled-select"><%= collection_select(:user_object, :object, @objects, :id, :description, {:prompt => true}, {selected: <%= @selected_object %> }) %></div>
或者您可以从查看文件中即时获取该 cookie,
<div class="styled-select"><%= collection_select(:user_object, :object, @objects, :id, :description, {:prompt => true}, {selected: <%= cookies[:some_key] %> }) %></div>
请注意,cookie 的值可能是哈希值,请确保您获得正确的值,您也可以在控制器中使用条件来避免获得 nil 并导致在 view by 中未选择任何值,
def index
@selected_object = cookies[:some_key]
if @selected_object.nil?
@selected_object = "default_selected"
end
end
如果您希望默认选择某个对象,请务必使用其 id,而不是整个对象。
尝试以下操作:
<%= f.collection_select(:user_object,:object,@objects ,:id, :description,:selected => cookies[:object])%>
Note:
Make sure cookies[:object] returns an id of the items in the select list
来源 - http://apidock.com/rails/ActionView/Helpers/FormOptionsHelper/collection_select#632--selected
我喜欢用options_for_select。 select 的选项可以采用数组或二维数组,在后一种情况下,第一个值显示给用户,第二个值保存。它还可以采用可选的第二个参数,select 是默认值:
if cookies[:whatever_key_is]
<%= f.select(:object, options_for_select(["array", "of", "options"], cookies[:whatever_key_is]) %>
end
我通常编写一个传递数组的方法,尤其是二维数组,然后将该方法作为第一个参数调用。我其实也经常为第二个参数写一个方法。
嘿,根据 APIdock 上的文档:
collection_select(:post, :author_id, Author.all, :id, :name_with_initial, {:selected => current_book.authors.map(&:id)})
所以你应该这样写:
在你的控制器中指定你的对象:@selected = cookies[:some_key]
collection_select(:user_object, :object, @objects, :id, :description, {:selected => @selected.map(&:id), :prompt => true})
您不需要整个对象,只需要 ids
来检查选定的对象。我认为这应该可以解决问题。
我正在使用 Rails 4.2.3。我的页面中有这个 select 表单域……
<%= f.label :object %><br>
<div class="styled-select"><%= collection_select(:user_object, :object, @objects, :id, :description, {:prompt => true}) %></div>
我的问题是,如果存在名为“object”的 cookie,我该如何预先 select 一个值?我想将 select 菜单的值设置为 cookie 的值。请注意,如果此视图由我的控制器的“索引”操作提供服务,我只想预 select 值(以上是不同控制器方法提供的部分视图的一部分)。
谢谢,-戴夫
如果你想让某个对象被默认选中,你可以使用:selected
假设您的 cookie 对象存储一个 id
{:selected => object}
<%= collection_select(:user_object, :object, @objects, :id, :description, {:prompt => true}, {:selected => object} ) %>
在您的索引控制器中获取 cookie 值,
def index
@selected_object = cookies[:some_key]
end
在你的Index.html.erb
<div class="styled-select"><%= collection_select(:user_object, :object, @objects, :id, :description, {:prompt => true}, {selected: <%= @selected_object %> }) %></div>
或者您可以从查看文件中即时获取该 cookie,
<div class="styled-select"><%= collection_select(:user_object, :object, @objects, :id, :description, {:prompt => true}, {selected: <%= cookies[:some_key] %> }) %></div>
请注意,cookie 的值可能是哈希值,请确保您获得正确的值,您也可以在控制器中使用条件来避免获得 nil 并导致在 view by 中未选择任何值,
def index
@selected_object = cookies[:some_key]
if @selected_object.nil?
@selected_object = "default_selected"
end
end
如果您希望默认选择某个对象,请务必使用其 id,而不是整个对象。
尝试以下操作:
<%= f.collection_select(:user_object,:object,@objects ,:id, :description,:selected => cookies[:object])%>
Note: Make sure cookies[:object] returns an id of the items in the select list
来源 - http://apidock.com/rails/ActionView/Helpers/FormOptionsHelper/collection_select#632--selected
我喜欢用options_for_select。 select 的选项可以采用数组或二维数组,在后一种情况下,第一个值显示给用户,第二个值保存。它还可以采用可选的第二个参数,select 是默认值:
if cookies[:whatever_key_is]
<%= f.select(:object, options_for_select(["array", "of", "options"], cookies[:whatever_key_is]) %>
end
我通常编写一个传递数组的方法,尤其是二维数组,然后将该方法作为第一个参数调用。我其实也经常为第二个参数写一个方法。
嘿,根据 APIdock 上的文档:
collection_select(:post, :author_id, Author.all, :id, :name_with_initial, {:selected => current_book.authors.map(&:id)})
所以你应该这样写:
在你的控制器中指定你的对象:@selected = cookies[:some_key]
collection_select(:user_object, :object, @objects, :id, :description, {:selected => @selected.map(&:id), :prompt => true})
您不需要整个对象,只需要 ids
来检查选定的对象。我认为这应该可以解决问题。