2015-12-17 52 views
1

我在我的Rails应用程序下面的代码:Rails作为选择发送零选项时,没有选择,选择

<%= select :object, 
      :id, 
      options_for_select(Hash[@object_list.map { |object| [object.name, object.id] }]), 
      {:include_blank => 'Please select...'}, 
      {} %> 

如果没有选项在我的控制器选择的话,我收到一个空字符串。

我该如何选择发送'nil'值来代替?

+0

'nil if“”''在服务器端? – Nithin

+0

在这个问题上SO有几十个帖子。一个简单的方法是使用:https://github.com/rubiety/nilify_blanks或https://github.com/mdeering/attribute_normalizer – radubogdan

+0

请发布相关控制器。 –

回答

2

我想你可以通过在列表中插入nil来实现。

<%= select :object, 
      :id, 
      options_for_select(Hash[@object_list.map { |object| [object.name, object.id] }].merge({:0 => nil}), selected: 0) %> 
+0

这是接近我想要的。你必须使用'合并',并将其设置为默认值,删除include_blank。编辑它,我会将其标记为已接受 – Dragos

+0

@Dragos我已根据您的要求进行了编辑。虽然没有尝试,但应该工作。 – Dusht

0

您应该为您的控制器使用before_action回调。

class SomeController 
    before_action :prepare_params 

    private 

    def prepare_params 
    params[:your_param] = nil if params[:your_param].blank? 
    end 
end 
+0

这可能是一个建议,而不是IMO的解决方案。 – Dusht