Rails管理对象呈现为“#<user:`in =”“=”“index =”“list =”“view =”“

时间:2018-02-14 16:49:56

标签: ruby-on-rails ruby rails-admin

=”“

我的模特功能:

def admin_user
  users.where('roles @> ARRAY[?]::varchar[]', ['admin']).first
end

我的管理员配置:

config.model 'Team' do
  list do
    field :admin_user
  end
end

它显示如下:

enter image description here

如何将其链接到用户管理视图?

2 个答案:

答案 0 :(得分:4)

它显示#<User:0x0....>的原因是因为您的admin_user返回了ActiveRecord的实例。当RailsAdmin输出时,它调用其#to_s方法,默认情况下返回上面的输出。您可以覆盖该方法,使其看起来像这样:

# User class

def to_s
  name
end

或者如果您愿意,可以修改admin_user以返回格式正确的字符串而不是ActiveRecord。

为了“将其链接到用户管理视图”,您需要在config.model中进行更多配置。您需要为其定义pretty_value并覆盖默认渲染。

config.model 'Team' do
   pretty_value do
     # user's active record
     user = bindings[:object]
     # path to its RailsAdmin 'show' page
     path = bindings[:view].show_path(model_name: 'User', id: bindings[:object].id)
     # <a href...> tag to it
     bindings[:view].tag(:a, href: path) << user.admin_user
  end
end

请记住,最后一行中的user.admin_user假设它返回您想要链接的字符串或User具有正确定义的#to_s

以下是官方文档https://github.com/sferik/rails_admin/wiki/Custom-list-fields-as-HTML-tags

的链接

答案 1 :(得分:0)

还有另一种方式 您可以创建另一个模型

类AdminUser&lt;用户     def self.default_scope       where('roles @&gt; ARRAY [?] :: varchar []',['admin'])     端

after_initialize do
   self.roles << ['admin']
end

然后是团队模型 班组     belongs_to:admin_user,foreign_key :: user_id

rails_admin do
  list do
    field :admin_user
  end
end

这不仅会在团队索引上显示正确的内容,而且还允许您通过管理员的属性(如姓名或电子邮件)过滤和搜索团队,同时还允许您使用其创建管理员拥有索引和编辑视图。 这可能有点矫枉过正,但它肯定会解决你的问题。