将lambda存储在散列的值部分中

时间:2016-04-07 14:56:00

标签: ruby-on-rails ruby-on-rails-4

有谁能告诉我这里发生了什么:

value: -> f { view_context.fr_user_column(f) }

这是来自更大的哈希:

def self.columns
 {
   user: {
     title: "Applicant",
     value: -> f { view_context.fr_user_column(f) }
   },
   ch_rep: {
    title: "CH Rep",
    value: -> f { view_context.fr_ch_rep_column(f) }
  }
 }

在方法中使用它来创建表:

def self.render_zable_columns(context, options = {})
 self.columns.each do |key, col|
  next if options[:except] && options[:except].include?(key)
  col_options = {title: col[:title]}
  col_options[:class] = "franchise_#{key}"
  col_options[:sort] = col.key?(:sort) ? col[:sort] : true
  if col[:value].present?
    context.send(:column, key, col_options, &col[:value])
  else
    context.send(:column, key, col_options)
  end
 end
end

我问的原因是因为我还有一个CH代表,它只是User模型的另一个名称,我正在尝试让表格显示CH代表(用户)名称,但这不起作用:

value: -> f { view_context.fr_ch_rep_column(f) }

1 个答案:

答案 0 :(得分:2)

这是在哈希的值部分中存储lambda。 f对应于在调用lambda时lambda内部可用的变量。

if col[:value].present?检查lambda

context.send(:column, key, col_options, &col[:value])发送(按顺序)

  • column作为符号
  • 密钥(即ch_rep或`用户)
  • column_options,其中包含标题和其他非lambda键/值
  • 指定为value密钥的lambda为context