2016-02-12 68 views
2

我想要以下内容: 与活动管理员用户界面构建器一起使用。红宝石功能上下文与块

为什么这个工程

def edit_action 
    column "" do |resource| 
     links = ''.html_safe 
     links += link_to I18n.t('active_admin.edit'), edit_resource_path(resource), :class => "member_link edit_link", :target => '_blank' 
     links 
    end 
end 
index do 
    edit_action 
end 

虽然这并不

edit_action = Proc.new{ 
    column "" do |resource| 
     links = ''.html_safe 
     links += link_to I18n.t('active_admin.edit'), edit_resource_path(resource), :class => "member_link edit_link", :target => '_blank' 
     links 
    end 
} 
index do 
    edit_action.call 
end 

是我得到的错误是,对象模型(例如)不具有的方法“一栏中”

+2

您可以将错误粘贴到您的非工作示例中吗?有什么不正确的工作? – Caillou

+0

'edit_action.call'预计无论'edit_action'返回的是一个'Proc'(或者相当的) - 是你的情况? –

+0

我不明白... –

回答

1

我会说这是一个范围界定问题:def edit_action引入了一个新的环境,而Proc.new从父类继承环境。在第一种情况下,column被识别,因为ActiveAdminindex操作提供了它。在第二种情况下,定义Proc的范围不知道任何关于column方法的任何信息,因此您会收到您提到的错误。

如果您在index do...块内移动定义edit_action = Proc.new{...,它应该再次工作。