在“简单表单”选择框中设置特定的选定值

时间:2015-09-08 15:12:41

标签: ruby-on-rails forms drop-down-menu default simple-form

我有一个选择框,其中填充了特定专辑类型的选项:

<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参数的最佳方法是什么?

2 个答案:

答案 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的助手可能是寻求简单解决方案的方法。