2012-11-23 36 views
7

Tôi đang sử dụng rails_admin cùng với globalize3 và không thể nhận các liên kết có thể tìm kiếm để hoạt động. Dưới đây là các mô hình (Person has_one/belongs_to Tên has_many/belongs_to NameTranslation):rails_admin liên kết có thể tìm kiếm

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 

Mô hình NameTranslation đến từ globalize3, nó có chứa các thuộc tính giống như tên (first_namelast_name) cộng localename_id,.

Trong config/initializers/rails_admin.rb Tôi có

config.model Person do 
    list do 
    field :name do 
     searchable name_translations: :last_name 
    end 
    end 
end 

Sau đó, trong GUI, khi tôi thêm một bộ lọc trên name, tôi nhận được:

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 

Rõ ràng, rails_admin đang tìm kiếm một cột tên là name_translations.last_name trong people thay vì tham gia/bao gồm namesname_translations - tại sao?

Những gì tôi cần rails_admin để làm được điều này, làm việc trong IRB:

>> Person.joins(name: :name_translations).where('name_translations.last_name like "test"') 

mà tạo ra các SQL sau:

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") 

này có thể được thực hiện trong rails_admin? Nhờ sự giúp đỡ của bạn ...

+0

Bạn đã bao giờ nhận ra điều này chưa? Tôi biết nó đã được một thời gian. – GreenPlastik

+0

Không, tôi không, xin lỗi ... – sebastian

Trả lời

1

Từ this thread, tôi theo đề nghị của Nick Roosevelt và nó làm việc cho trường hợp của tôi

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 

tôi đã cố gắng searchable room: :name và nó đã không làm việc, nhưng searchable [{Room => :name}] vẻ để làm cho nó làm việc.

2

Tôi gặp sự cố tương tự với mối quan hệ has one. Cách tôi giải quyết nó là đặt default_scope trên mô hình và tham gia nó với bảng được liên kết (đó là cách duy nhất tôi có thể nhận được quản trị viên đường ray tham gia hai bảng này).

Tôi cũng phải đặt queryable true trên trường được liên kết.

Hãy tưởng tượng rằng bạn đã phải tìm kiếm chỉ trong hiệp hội tên, sau đó dưới đây là cách nó sẽ làm việc:

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

    default_scope { eager_load(:name) } 
end 

config.model Person do 
    list do 
    field :name do 
     queryable true 
     searchable [:column1, :column2, ..] 
    end 
    end 
end 

Tuy nhiên, bạn cần phải tìm kiếm thông qua các hiệp hội has many và tôi không biết liệu phương pháp mà có thể vẫn hoạt động, nhưng đây là phỏng đoán:

class Person < ActiveRecord::Base 
    has_one :name, inverse_of: :person 
    has_many :name_translations, through: :name 

    default_scope { eager_load(:name_translations) } 
end 

config.model Person do 
    list do 
    field :name_translations do 
     queryable true 
     searchable :last_name 
    end 
    end 
end 
+0

Tôi có thể xác minh rằng điều này hoạt động trên Rails 5, Rails_admin v1.1. Hiệp hội xuất hiện trong danh sách các trường trong bộ lọc, nhưng cho đến khi các dòng có thể truy vấn - có thể tìm kiếm được đưa vào, nó chỉ hiển thị toàn bộ danh sách chưa được lọc. Không có lỗi hoặc bất kỳ đầu mối nào là sai. Điều này làm cho bộ lọc/tìm kiếm hoạt động như mong đợi. Bạn có thể xem một ví dụ làm việc đầy đủ ở đây .. https://github.com/dgleba/hrapp361 –

Các vấn đề liên quan