2016-04-07 36 views
1

誰能告訴我這是怎麼回事:存儲拉姆達的哈希值部分

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代表它只是爲用戶模型中,一個不同的名稱d我試圖讓該表顯示CH代表(用戶)的名字,但是這是行不通的:

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

回答

2

這是存儲在一個散列值部分的拉姆達。 f對應於在lambda被調用時將在lambda內部可用的變量。

if col[:value].present?檢查拉姆達

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

  • column作爲符號
  • 的密鑰(即ch_rep或`用戶)
  • column_options,其包括標題和其他非拉姆達鍵/值
  • 指定爲的拉姆達密鑰,至context