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
モデルはglobalize3から来ており、 name ( and ) plus and , とNameTranslation
同じ属性が含まれています。first_name
last_name
locale
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 は join/includeではなくname_translations.last_name
inという名前の列を探していますが、なぜでしょうか?people
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 で実行できますか? ご協力いただきありがとうございます...