我将 rails_admin 与 globalize3 一起使用,无法使可搜索的关联起作用。以下是模型(人 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
该NameTranslation
模型来自 globalize3,它包含与 name ( first_name
and last_name
) plus locale
and相同的属性name_id
。
在config/initializers/rails_admin.rb
我有
config.model Person do
list do
field :name do
searchable name_translations: :last_name
end
end
end
然后,在 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
显然,rails_admin 正在寻找一个名为name_translations.last_name
inpeople
而不是加入/包含的列,names
并且name_translations
- 为什么?
我需要 rails_admin 做的是,在 irb 工作:
>> Person.joins( name: :name_translations ).where('name_translations.last_name like "test"')
生成以下 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")
这可以在 rails_admin 中完成吗?谢谢你的帮助...