【问题标题】:rails_admin get the current entity and display custom enumrails_admin 获取当前实体并显示自定义枚举
【发布时间】:2018-08-20 14:59:51
【问题描述】:

我正在尝试使用除名称以外的其他内容自定义枚举字段。

例如,我的数据库中的实体记录有如下列:名称、邮政编码、id 等 ..

我想在下拉菜单“#{name} #{postal_code}, #{department}

我正在这样做:

field :city, :enum do
  enum do
    # Here I would like to get the entity from DB in order to have all 
    # columns to something similar as => 
      entity.collect.each { |c| "#{c.name} (#{c.postal_code}), # 
      {c.department.name}"}
  end
end

但我不知道如何获取 City 实体实际值的活动记录(在我的示例中为实体)。

我该怎么做?

注意:该部门属于与 City 关联的另一个模型

【问题讨论】:

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


    【解决方案1】:

    考虑到 OP cmets,我假设有问题的模型具有这样定义的关联:

    belongs_to :city
    

    而城市领域本身就是这样的

    rails_admin do
      edit do
        field :city
      end
    end
    

    因为这种方式 rails admin 将呈现一个选择下拉菜单,让您无需加载所有城市即可搜索城市。

    在 City 模型上你可以定义 title 方法,引用the docs

    默认情况下,它会尝试在相关记录上调用“名称”或“标题”方法。如果对象都没有响应,则标签将由模型的类名及其数据库标识符构成。您可以添加标签方法(或替换默认的 [:name, :title]):

    RailsAdmin.config {|c| c.label_methods << :rails_admin_title }
    

    然后可以定义title方法

    class City < ApplicationRecord
       def rails_admin_title
          "#{self.name} (#{self.postal_code}), #{self.department.name}"
       end 
    end
    

    在一个相关问题中,您可能想要配置 rails 管理员搜索城市的方式,我将 just link to the docs

    【讨论】:

    • 我设法在我的模型中调用了该方法,但由于未知原因,我无法拥有当前的 City 实体。这就是我在 rails_admin.rb object_label_method do :rails_admin_title end inside my model def rails_admin_title "#{self.city.name} (#{self.city.postal_code})" endself 中的内容我当前的模型,每列都有空值
    • 它也会对新实例使用该方法,因此您需要为新城市输出一个默认值,只需检查该方法内部是否 self.new_record?并返回一些不依赖于任何设置值的字符串。
    【解决方案2】:

    你可以这样做,但是你需要为每个选择下拉列表定义一个名称和一个(稳定的)值,一个简单的散列来做到这一点:

      field :city, :enum do
        enum do
          entity = bindings[:object]
          City.all.map do |c| 
            {c.id => "#{c.name} (#{c.postal_code}), #{c.department.name}"}
          end
        end
      end
    

    我假设每个城市都有一个 id,但您可以使用您想要存储在数据库中该字段上的任何值。

    所以您的用户会看到格式良好的字符串,但 rails 管理员会在城市字段上发布带有城市 ID 的表单。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-08
      相关资源
      最近更新 更多