在方法调用中插入Ruby?

Ste*_*ssi 5 ruby ruby-on-rails

在我的用户模型中,我有一些属性,如is_foos_admin和is_bars_admin,用于确定允许用户编辑哪种记录.

我想干掉我的编辑链接,目前看起来像这样:

<%= link_to 'Edit', edit_foo_path(foo), :class => 'edit' if current_user.is_foos_admin? %>
...
<%= link_to 'Edit', edit_bar_path(bar), :class => 'edit' if current_user.is_bars_admin? %>
Run Code Online (Sandbox Code Playgroud)

我想做一个帮助,让我传入一个foo或bar并获取一个链接进行编辑,如下所示:

<%= edit_link_for(foo) %>

帮助器可能看起来像这样(这不起作用):

def edit_link_for(thing)
  if current_user.is_things_admin?
    link_to 'Edit', edit_polymorphic_path(thing), :class => 'edit'
  end
end
Run Code Online (Sandbox Code Playgroud)

与模型无关的edit_polymorphic_path方法让我在那里,但它是"is_things_admin"方法,我不知道如何通用化.如果我可以在帮助器中使用插值Ruby,我想做类似的事情

if current_user.is_#{thing.class.name.downcase.pluralize}_admin?
Run Code Online (Sandbox Code Playgroud)

但当然这不起作用.有任何想法吗?

Ale*_*tie 12

尝试使用send:

if current_user.send("is_#{@model}_admin?")
Run Code Online (Sandbox Code Playgroud)