【问题标题】:rails helper inside collection_selectcollection_select 中的 rails 助手
【发布时间】:2015-07-03 07:54:06
【问题描述】:

我有一个简单的助手

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

想在collection select中使用

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

但是如果 ecr 没有命名其他选择选项是空的

【问题讨论】:

  • 当您更改为get_ecr_name(name,ip) 并以get_ecr_name(@ecr.name,@ecr.ip) 调用时会发生什么?
  • @ pavan它返回我的IP列表,我的目标是当没有名称在选择菜单 span>中显示IP

标签: ruby-on-rails helper


【解决方案1】:

由于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】:

    那些空白选择选项包含 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')
    

    【讨论】:

      【解决方案3】:

      检查一下,有options_from_collection_for_select的选项

      <%= f.select :ecr_id, options_from_collection_for_select(get_ecr_name(@ecr)).name, 'id', 'name') %>
      

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          猜你喜欢
          • 2015-03-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-02-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多