Rails集合选择器设置include_blank的值

8
请帮我解决与collection_select相关的问题。 当我使用以下代码时:
collection_select(:service, :carmake_id, Carmake.all, :id, :name, include_blank: 'Any')

HTML 是:

<select id="service_carmake_id" name="service[carmake_id]">
  <option value="">Any</option>
  <option value="12">Audi</option>
  <option value="16">Porsche</option>
  <option value="17">VW</option>
</select>

但是我需要在"任何"选项中使用value="0",这种情况是否可行?

更新:

select(:service, :carmake_id, [['Any', 0]] + Carmake.all.collect { |p| [p.name, p.id]})

你帮了我很多,但是有铁路吗?或者我理解错了什么?


如果你传递 [0, 'Any'] 会怎样? - Mike Szyndel
3
我认为这没有意义。看起来你要求的是默认值而不是空白值。根据定义,空白是一个将会失败于“存在性”检查的值。 - Mike Szyndel
@RailsGuy 当然没有意义,这就是为什么我添加了第二个评论。 - Mike Szyndel
@MichaelSzyndel,[0,'Any']生成<option value=""> </option>。我需要在数据库请求中使用carmake_id '0',以减少代码量并避免写带有NULL的条件。 - iAnton
@MichaelSzyndel,是的,我的条件是Service.select([:name]).where('(carmake_id = ?) AND (carmodel_id = ?) AND (carconfiguration_id = ?) AND (lower(name) LIKE lower(?))', carmake, carmodel, carconfiguration, "%#{params[:name]}%")。我展示不同品牌、型号和配置的服务,如果ids = 0,则该服务适用于任何汽车。 - iAnton
显示剩余5条评论
1个回答

14

这个可能有效:

options = Carmake.all.unshift Carmake.new(id: 0, name: 'Any')
collection_select(:service, :carmake_id, options, :id, :name, include_blank: 'Any')

虽然我没有测试保存/更新功能。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接