Как сделать раскрывающийся список настроек в модели ассоциаций Rails Admin - PullRequest
0 голосов
/ 01 мая 2019

Rails Admin has_many Ассоциация опций drop drop

Я хочу внести некоторые изменения в опцию rails admin select.У меня есть несколько моделей с отношением has_many.

Файлы моделей post.rb

class Post < ApplicationRecord
    has_many :photos, dependent: :destroy
    accepts_nested_attributes_for :photos, allow_destroy: true
    def post_image
       photos&.first&.asset_url
    end
end

photo.rb

class Photo < ApplicationRecord
  belongs_to :post
end

homepage.rb

class Homepage < ApplicationRecord
    has_many :homepagepost
    has_many :posts,-> { order(likes_count: :desc) }, through: :homepagepost
end

homepagepost.rb

class Homepagepost < ApplicationRecord
    belongs_to :post
end

Rails admin config rails_admin.rb

config.model Homepage do
    label "Homepage Rows"
    edit do
      field :title_heading
      field :posts
      field :status
    end
    list do
      field :title_heading
      field :posts
      field :status
      field :created_at
      field :updated_at
    end
end

Теперь я хочу показать URL-адрес сообщения в раскрывающемся меню «Сообщение» с идентификатором сообщения.как я это делаю в рельсах админаКак Пост # 1370 post_test.png

enter image description here

Схема

create_table "photos", id: :serial, force: :cascade do |t|
    t.string "asset_url"
    t.integer "post_id"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.index ["post_id"], name: "index_photos_on_post_id"
end

create_table "posts", id: :serial, force: :cascade do |t|
    t.integer "user_id"
    t.text "description"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.index ["user_id"], name: "index_posts_on_user_id"
end 

create_table "homepageposts", force: :cascade do |t|
    t.integer "homepage_id"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.bigint "post_id"
    t.index ["post_id"], name: "index_homepageposts_on_post_id"
end

create_table "homepages", force: :cascade do |t|
    t.string "title_heading"
    t.integer "status"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
end

1 Ответ

1 голос
/ 02 мая 2019

Сначала настройте на инициализаторе rails admin, обычно на config/initializers/rails_admin.rb внутри блока конфигурации, метод, который будет использоваться в ваших моделях для определения заголовка, который будет отображаться для каждого объекта, например:

RailsAdmin.config do |config|
  config.label_methods = [:rails_admin_title]
end

Затем в своей почтовой модели определите этот метод

class Post < ApplicationRecord
    has_many :photos, dependent: :destroy
    accepts_nested_attributes_for :photos, allow_destroy: true

    def rails_admin_title
      "<a href='#{post_image}'>Link</a>".html_safe
    end

    def post_image
      photos&.first&.asset_url
    end
end

. Чтобы увидеть это изменение, вам может потребоваться перезагрузить сервер разработки.

...