我有一个简单的帮手
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避免命名其他选择选项的问题为空
答案 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' })