2015-12-17 53 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