我有一个选择框,其中填充了特定专辑类型的选项:
<select class="select optional" name="album[album_type_id]" id="album_album_type_id">
<option value="1">Collaborative Album</option>
<option selected="selected" value="2">Compilation Album</option>
<option value="2">EP</option>
<option value="3">Soundtrack</option>
<option value="4">Studio Album</option>
</select>
我想将Studio Album
设为默认值。我知道我可以做以下事情:
<%= f.input :album_type_id, as: :select, collection: @album_types, selected: 4 %>
但是未来必然会添加更多的专辑类型,更倾向于定位它的字符串文字标题。将这个用于SimpleForms的selected参数的最佳方法是什么?
答案 0 :(得分:1)
同意以前的答案是理想的。与此同时,我使用了帮手:
<%= f.input :album_type_id, as: :select, collection: @album_types, selected: get_index_by_name(@albums, 'Studio Album') %>
然后在helpers / album_helper.rb中:
module AlbumHelper
def get_index_by_name(albums, name)
albums.first { |album| album.name == name }.id
end
end
或者它是一个实例变量,你可以做到这一点,但也许它不太可重用:
<%= f.input :album_type_id, as: :select, collection: @album_types, selected: get_album_index_of('Studio Album') %>
然后帮助者:
module AlbumHelper
def get_album_index_of(name)
@albums.first { |album| album.name == name }.id
end
end
如果还有其他下拉菜单,或者可能是在整个网站上使用的通用名称:
<%= f.input :album_type_id, as: :select, collection: @album_types, selected: get_index_by_attribute(@albums, :name, 'Studio Album') %>
在application_helper.rb中:
module ApplicationHelper
def get_index_by_attribute(collection, attribute, value)
collection.first { |item| item.send(attribute) == value }.id
end
end
答案 1 :(得分:0)
你可以这样做:
<%= f.input :album_type_id, as: :select, priority: ['Studio Album'], collection: @album_types %>
我现在无法对其进行测试,但我知道国家/地区的馆藏可以像上面那样优先考虑(甚至在documentation中也是如此)。我不明白为什么它不适用于您的特定情况。
你是对的 - 我已经查看了来源,优先级与特定的:country
和:time_zone
输入相关联。要获得您想要的内容,您必须找出哪个id
是您要优先处理的集合,或者您可以创建custom input并实现优先级功能代码为这两个输入做的方式。我想这取决于你的需求。返回id
的助手可能是寻求简单解决方案的方法。