2011-05-11 59 views
4

我如何可以截斷值在collection_selectcollection_select截斷

<%= collection_select(:standard, :parent_id, Standard.all, :id, :value, {:include_blank => 'No Parent'}) %> 

我想有值縮短,但我得到的錯誤與此:

<%= collection_select(:standard, :parent_id, Standard.all, :id, truncate(:value, :length => 40), {:include_blank => 'No Parent'}) %> 

回答

5

選項1:

爲您的模型添加一個自定義方法,如truncated_value,並使用該方法代替:

class Standard < ActiveRecord::Base 
    include ActionView::Helpers::TextHelper 

    def truncated_value 
    truncate(value, :length => 40) 
    end 

    ... 
    ... 
    ... 
end 

然後在您的視圖:

<%= collection_select(:standard, 
         :parent_id, 
         Standard.all, 
         :id, 
         :truncated_value, 
         {:include_blank => 'No Parent'}) %> 

選項2:

只需使用一個的select標籤幫手,而不是:

<%= select(:standard, 
      :parent_id, 
      Standard.all.collect{ |s| [truncate(s.value, :length => 40), s.id] }, 
      {:include_blank => 'No Parent'}) %> 
1

我通過傳遞text_method解決了這個問題作爲proc,如下所示:

<%= collection_select(:standard, 
        :parent_id, 
        Standard.all, 
        :id, 
        proc {|st| st.value.truncate(40)}, 
        {:include_blank => 'No Parent'}) %> 

欲瞭解更多的信息,我注意到collection_select獲得的價值爲text_method,所以我用proc發送的代碼塊。