Rails Admin修改列表/展示视图以添加新的/自定义列

16

我已经设置了Rails_admin作为我的网站管理界面。

对于其中的一个模型,我想要显示一个额外的列。

假设我在模型中有name、phone、email、image url、rank等属性(比如说Student模型),那么我需要显示的列应该是:Name | Rank | Preview(额外的列)

在“Preview”列中,我希望根据每个“student”的属性(如email、image、url等)来显示一些渲染后的html。

我已经找到了一种方法,在edit/update/create时包含partial来提供相应的字段/表单。但是在list/show中包含同样的partial实现失败了。

所以,是否有任何办法可以将partial添加到model的list/show视图中,以显示渲染后的内容呢?

编辑:代码已添加

config.model Utility do
   list do
     field :code
     field :priority
     field :name
     field :url
     field :phone
     field :logo
     field :content
     sort_by :priority
     items_per_page 100
   end
end

这将在 rails_admin 中显示以下列:

Code | Priority | Name | Url | Phone | Logo | Content

我想要的是 Code | Priority | Preview ,其中在预览列中,我想要显示HTML渲染内容,例如:

blah.html(只是示例),此处我想以一种在页面上展示的方式进行渲染,以便管理员也能够查看。

<div class="blah">
  <%=util.name%> <%=util.phone%> <%=util.logo%> #usage with proper divs/tags/rendering
</div >

请更具体一些,展示一些代码。 - Michael Slade
我已添加了代码并指定了详细要求。 - Rahul garg
4个回答

27
config.model Utility do
  configure :preview do
    pretty_value do
      util = bindings[:object]
      %{<div class="blah">
          #{util.name} #{util.phone} #{util.logo}
        </div >}
    end
    children_fields [:name, :phone, :logo] # will be used for searching/filtering, first field will be used for sorting
    read_only true # won't be editable in forms (alternatively, hide it in edit section)
  end



  list do
    field :code
    field :priority
    field :preview
  end

  show do
    field :code
    field :priority
    field :preview
  end

  # other sections will show all fields
end

摘要:

在输出中不要使用部分视图。最后的覆盖点是pretty_value


如果“预览”应该包括某个belongs_to模型的一些数据怎么办?比如Payout.Account.Currency.code?我使用了“%{#{payout.account.currency.code}}”而不是“#{util.name}#{util.phone}#{util.logo}”,在显示方面它可以正常工作,但我无法使“code”排序。如何使children_fields在关联模型字段上工作? - Zelid
这个可以运行,但你需要在Utility模型中添加一个方法preview,返回任何你想要的值。 - Santanu Karmakar
3
为了使我的输出字符串正确显示,我不得不添加 .html_safe - Jason Swett
实际上,你可以使用一个部分,例如:pretty_value { bindings[:view].render partial: 'my_partial' } - Marcio Klepacz

7
Rails Admin称这些为“虚拟”字段类型。最简单的方法是在你的模型上创建一个方法,然后在列表/展示中引用它:
class ModelName < ActiveRecord::Base

  def invite_link
    %{<a href="http://site.com/#{self.uid}">invite link</a>}.html_safe
  end

  rails_admin do
    configure :invite_link do
        visible false # so it's not on new/edit 
    end

    list do
      field :name
      field :invite_link
    end

    show do
      field :name
      field :invite_link
    end
  end
end

尽管这样做可以实现,但最好避免将此视图逻辑放入模型中。 - hcarreras

-1
class Utility < ActiveRecord::Base 
  def preview
    name  
  end
end

config.model Utility do
  configure :preview do
    pretty_value do
      util = bindings[:object]
      %{<div class="blah">
          #{util.name} #{util.phone} #{util.logo}
        </div >}
    end
    children_fields [:name, :phone, :logo] # will be used for searching/filtering, first field will be used for sorting
    read_only true # won't be editable in forms (alternatively, hide it in edit section)
  end



  list do
    field :code
    field :priority
    field :preview
  end

  show do
    field :code
    field :priority
    field :preview
  end

  # other sections will show all fields
end

从 preview 方法中,返回任何非空值。 - Santanu Karmakar

-1
class ModelName < ActiveRecord::Base
  rails_admin do
    list do
      field :job_title
      field :required_experiance
      field :salary 
      field :technical_skills
      field :non_technical_skills     
    end

    create do
      field :job_title, :enum do
        help 'Please select Job Title'
        enum do
          ['Business Analyst', 'Trainee Business Analyst', 'Mobile/Web Developer',
           'iOS Developer', 'Graphic Designer', 'System Administrator', 'Content Writer']
        end
      end

      field :job_type do
        help 'e.g. Developer, Management'
      end

      field :undergraduate_degree, :enum do
        help 'Please select UG Degree'
        enum do
          [ 'BE', 'BCA', 'B.Tech','BCs', 'BSc', 'BBA', 'BA', 'BCom', 'BSL']
        end 
      end

      field :postgraduate_degree, :enum do
        help 'Please select PG Degree'
        enum do
          [ 'ME', 'MCA', 'M.Tech', 'MCs', 'MSc', 'MBA', 'MCM', 'MMM', 'MA', 'MCom']
        end 
      end

      field :required_experiance, :enum do
        help 'Please select Year'
        enum do
          [ 'Select Year', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10']
      end 
    end
  end
end

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接