我正在使用Rails 4.2.3。我的页面中有这个选择表单字段...
<%= f.label :object %><br>
<div class="styled-select"><%= collection_select(:user_object, :object, @objects, :id, :description, {:prompt => true}) %></div>
我的问题是,如果存在名为“object”的cookie,我该如何预先选择一个值?我想将select菜单的值设置为cookie的值。注意,我只想在我的控制器的“索引”操作提供此视图时预先选择该值(上面是由不同控制器方法提供的部分视图的一部分)。
谢谢, - 戴夫
答案 0 :(得分:0)
如果您希望默认选择某个对象,可以使用:selected
假设您的cookie对象存储了一个id
{:selected => object}
<%= collection_select(:user_object, :object, @objects, :id, :description, {:prompt => true}, {:selected => object} ) %>
答案 1 :(得分:0)
在索引控制器中获取cookie值,
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
let senderButton = sender as! UIButton
if segue.identifier == "showDetailasDetail" {
let vc = segue.destinationViewController as! InfoPopupVC
vc .currentEvent = posts[senderButton.tag]
}
}
在Index.html.erb
中def index
@selected_object = cookies[:some_key]
end
或者您可以从View文件中快速获取该Cookie,
<div class="styled-select"><%= collection_select(:user_object, :object, @objects, :id, :description, {:prompt => true}, {selected: <%= @selected_object %> }) %></div>
请注意,cookie的值可能是哈希值,请确保您获得正确的值,您也可以在控制器中使用条件来避免获取nil并且不会在视图中选择任何值,
<div class="styled-select"><%= collection_select(:user_object, :object, @objects, :id, :description, {:prompt => true}, {selected: <%= cookies[:some_key] %> }) %></div>
答案 2 :(得分:0)
如果您希望默认选择某个对象,请务必使用其ID,而不是整个对象。
尝试以下方法:
<%= f.collection_select(:user_object,:object,@objects ,:id, :description,:selected => cookies[:object])%>
注意: 确保 cookies [:object] 返回选择列表中项目的 id
来源 - http://apidock.com/rails/ActionView/Helpers/FormOptionsHelper/collection_select#632--selected
答案 3 :(得分:0)
我喜欢使用options_for_select。 select的选项可以采用数组或二维数组,在后一种情况下,第一个值显示给用户,第二个值是保存的值。它还可以采用可选的第二个参数来选择默认值:
if cookies[:whatever_key_is]
<%= f.select(:object, options_for_select(["array", "of", "options"], cookies[:whatever_key_is]) %>
end
我通常会编写一个传递数组的方法,特别是如果它是二维的,然后将该方法作为第一个参数调用。实际上我通常也会为第二个参数编写一个方法。
答案 4 :(得分:0)
嘿,根据APIdock的文件:
collection_select(:post, :author_id, Author.all, :id, :name_with_initial, {:selected => current_book.authors.map(&:id)})
所以你应该这样写:
在You控制器中指定对象:@selected = cookies[:some_key]
collection_select(:user_object, :object, @objects, :id, :description, {:selected => @selected.map(&:id), :prompt => true})
您不需要整个对象,只需ids
即可查看所选对象。我认为这应该可以解决问题。