在collection_select里面的rails helper

时间:2015-07-03 07:54:06

标签: ruby-on-rails helper

我有一个简单的帮手

 def get_ecr_name(name)
   name.present? ? :name : :ip
 end

想要在收藏中使用选择

=f.collection_select(:ecr_id,  current_user.ecrs, :id, get_ecr_name(@ecr.name), :prompt => 'Select ECR')

但如果ecr避免命名其他选择选项的问题为空enter image description here

4 个答案:

答案 0 :(得分:1)

那些空白选择选项包含id

为id你写另一个帮手

def get_ecr_id(id,name)
   return id  if name.present?
end

然后重写

=f.collection_select(:ecr_id,  current_user.ecrs, get_ecr_id(@ecr.id,@ecr.name), get_ecr_name(@ecr.name), :prompt => 'Select ECR')

答案 1 :(得分:0)

由于collection_select将使用@ecr.name(其中存在name)调用您的帮助程序方法一次,因此会返回:name,因此正在调用name方法。克服这种情况的一种方法是在控制器中创建一个数组对象的另一个变量,如下所示:

@ecrs = current_user.ecrs.map{|ecr| (ecr.name = ecr.name.present? ? ecr.name : ecr.ip); ecr } # returns a temporary modified ecrs array.

然后在您的视图中使用它:

= f.collection_select(:ecr_id,  @ecrs, :id, :name, :prompt => 'Select ECR')

答案 2 :(得分:0)

检查它,options_from_collection_for_select

有一个选项
<%= f.select :ecr_id, options_from_collection_for_select(get_ecr_name(@ecr)).name, 'id', 'name') %>

答案 3 :(得分:0)

感谢您的帮助。我根据您的答案重做f.select

    =f.select('ecr_id', current_user.ecrs.collect {|p|[get_ecr_name(p.name,p.ip),p.id] }, { prompt: 'Select Ecr' })