Ruby 函数上下文与块
Ruby function context vs blocks
我正在尝试计算以下内容:
与活动管理员一起使用 ui builder.
为什么这样行得通
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
我得到的错误是对象模型(例如)没有方法 'column'
我会说这是一个范围问题:def edit_action
引入了一个新环境,而 Proc.new
从父环境继承了环境。在第一种情况下,column
被识别是因为 ActiveAdmin
为 index
操作提供了它。在第二种情况下,定义 Proc 的范围对任何 column
方法一无所知,因此您会得到您提到的错误。
如果将定义 edit_action = Proc.new{...
移动到 index do...
块中,它应该会再次起作用。
我正在尝试计算以下内容: 与活动管理员一起使用 ui builder.
为什么这样行得通
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
我得到的错误是对象模型(例如)没有方法 'column'
我会说这是一个范围问题:def edit_action
引入了一个新环境,而 Proc.new
从父环境继承了环境。在第一种情况下,column
被识别是因为 ActiveAdmin
为 index
操作提供了它。在第二种情况下,定义 Proc 的范围对任何 column
方法一无所知,因此您会得到您提到的错误。
如果将定义 edit_action = Proc.new{...
移动到 index do...
块中,它应该会再次起作用。