ruby-on-rails - 链接到事件管理员中的自定义多态关联操作

标签 ruby-on-rails ruby polymorphism activeadmin polymorphic-associations

我正在与 Active Admin 合作。目前,我有一个索引页面,允许我查看所有已被用户标记的资源。鉴于存在各种类型的资源,我的 Flagged 类和各种资源表之间存在多态关系。

在我的索引页中,在 Active Admin 上,我希望能够链接到属于特定资源类型的适当显示页面。

我的所有代码都可以正常工作,但我不喜欢我提出的解决方案。

我如何改进我当前的解决方案,这样我就不必编写一个笨拙的条件?

模型

class Flag < ActiveRecord::Base
  #create relationships with user and flag model
  belongs_to :flaggable, polymorphic: true
end

class MilitaryResource < ActiveRecord::Base
  has_many :flags, as: :flaggable, :dependent => :destroy  
end

class DistrictResource < ActiveRecord::Base
  has_many :flags, as: :flaggable, :dependent => :destroy  
end

class SchoolResource < ActiveRecord::Base
  has_many :flags, as: :flaggable, :dependent => :destroy  
end

ActiveAdmin

ActiveAdmin.register Flag do

  #parameters permitted to create military resources
  permit_params :id, :user_id, :flaggable_id, :flaggable_type, :message, :created_at

  #index page
  index do
    column :flaggable_type

    ###Current Solution
    column "Flagged Resource" do |site|
      if site.flaggable_type == "MilitaryResource"

        link_to site.flaggable.name, :controller => "military_resources", :action => "show", :id => "#{site.flaggable_id}".html_safe

      elsif site.flaggable_type == "SchoolResource"

        link_to site.flaggable.name, :controller => "school_resources", :action => "show", :id => "#{site.flaggable_id}".html_safe

      elsif site.flaggable_type == "DistrictResource"

        link_to site.flaggable.name, :controller => "district_resources", :action => "show", :id => "#{site.flaggable_id}".html_safe

      end
    end

    column :message
    actions
  end

最佳答案

你可以这样做来避免条件:

column "Flagged Resource" do |site|
  link_to site.flaggable.name, 
          :controller => site.flaggable_type.underscore.pluralize, 
          :action => "show",
          :id => "#{site.flaggable_id}"
    .html_safe
end

关于ruby-on-rails - 链接到事件管理员中的自定义多态关联操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35949573/

相关文章:

ruby - Ruby 中的字符串常量

recursion - OCaml 显式多态类型注释

ruby-on-rails - Rails 有两个和多个

ruby-on-rails - rails : Remove element from array of hashes

javascript - 在javascript中追加ruby部分,并传递一个rails变量

ruby-on-rails - 在 rails 中具有嵌套属性的表单

ruby - 使用注入(inject)方法查找最长的单词

ruby-on-rails - YAML 输入,YAML 输出——一般问题/指南

c++ - 作为类成员的可重写动态类型值

java - 如何在Java中向下转换数组?(多态)