rails_admin可搜索的关联

seb*_*ian 8 rails-admin

我正在使用rails_admin和globalize3,并且无法使可搜索的关联工作.以下是模型(Person has_one/belongs_to Name has_many/belongs_to NameTranslation):

class Person < ActiveRecord::Base
  has_one :name, inverse_of: :person
end

class Name < ActiveRecord::Base
  belongs_to :person, inverse_of: :name
  translates :first_name, :last_name
  has_many :name_translations, inverse_of: :name, dependent: :destroy
end

class NameTranslation < ActiveRecord::Base
  belongs_to :name, inverse_of: :name_translations      
end
Run Code Online (Sandbox Code Playgroud)

NameTranslation模型来自globalize3,它包含与name(first_namelast_name)plus localename_id,相同的属性.

config/initializers/rails_admin.rb我有

config.model Person do
  list do
    field :name do
      searchable name_translations: :last_name
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

然后,在GUI中,当我添加过滤器时name,我得到:

SQLite3::SQLException: no such column: name_translations.last_name: SELECT  "people".* FROM "people"  WHERE (((name_translations.last_name LIKE '%freud%'))) ORDER BY people.id desc LIMIT 20 OFFSET 0
Run Code Online (Sandbox Code Playgroud)

显然,rails_admin正在寻找一个名为列name_translations.last_namepeople,而不是加入/包括namesname_translations-为什么?

我需要rails_admin做的是这个,在irb中工作:

>> Person.joins( name: :name_translations ).where('name_translations.last_name like "test"')
Run Code Online (Sandbox Code Playgroud)

生成以下SQL:

SELECT "people".* FROM "people" INNER JOIN "names" ON "names"."person_id" = "people"."id" INNER JOIN "name_translations" ON "name_translations"."name_id" = "names"."id" WHERE (name_translations.last_name like "test")
Run Code Online (Sandbox Code Playgroud)

可以在rails_admin中完成吗?谢谢你的帮助...

Vic*_*Vic 5

这个线程,我遵循了尼克罗斯福的建议,它对我的​​情况有效

class Room < ActiveRecord:Base
  has_many :time_slots
end

class TimeSlot < ActiveRecord::Base
  belongs_to :room

  rails_admin do
    list do
      field :day do
        searchable true
      end
      # field :room do
      #   searchable room: :name
      # end
      field :room do
        searchable [{Room => :name}]
        queryable true
      end
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

我试过了searchable room: :name,但searchable [{Room => :name}]它不起作用,但似乎使它起作用。