2011-08-17 18 views
46

Projemde ActiveAdmin mücevher kullanıyorum.ActiveAdmin, birleşim yoluyla has_many kullanan modellerde nasıl kullanılır?

I ilişki sayesinde has_many kullanılarak 2 modelleri vardır. Veritabanı şeması, RailsGuide'deki örnekle tam olarak aynı görünüyor. hekimler Sayfadaki her hastanın http://guides.rubyonrails.org/association_basics.html#the-has_many-through-association has_many through association http://guides.rubyonrails.org/images/has_many_through.png

nasıl üzere ActiveAdmin kullanabilirsiniz ...

  1. gösteri randevu tarihi? hekimler Sayfadaki her hastanın
  2. düzenlemek randevu tarihi?

teşekkürler. 2 İçin 1 için :)

+0

var? –

+2

Bunu ben yaratmadım. Rails Guide web sitesinden alıyorum. –

+7

Bulmamız gereken şey, bu diyagramı oluşturmak için THEY'nin kullandığı şey! –

cevap

70

)

show do 
    panel "Patients" do 
    table_for physician.appointments do 
     column "name" do |appointment| 
     appointment.patient.name 
     end 
     column :appointment_date 
    end 
    end 
end 

) cevap olarak

form do |f| 
    f.inputs "Details" do # physician's fields 
    f.input :name 
    end 

    f.has_many :appointments do |app_f| 
    app_f.inputs "Appointments" do 
     if !app_f.object.nil? 
     # show the destroy checkbox only if it is an existing appointment 
     # else, there's already dynamic JS to add/remove new appointments 
     app_f.input :_destroy, :as => :boolean, :label => "Destroy?" 
     end 

     app_f.input :patient # it should automatically generate a drop-down select to choose from your existing patients 
     app_f.input :appointment_date 
    end 
    end 
end 
+2

Benzer bir şey yapıyorum ama sonuçta bir SQL kabusu. Randevu için her çağrı.Hasta bir başka SQL sorgusu üretir .. standart n + 1 sorgu sorunu. Herkes ActiveRecord'un istekli yüklemesinin eşdeğerini gerçekleştirmenin bir yolunu buldu mu? Örneğin: (hasta) – tomblomfield

+0

Çözümünüzle ilgili bir sorunum var. _destroy girdisi – Awea

+0

durumumda çalışmaz, birçok neden olabilir ve "işe yaramaz", tam olarak neyin yanlış gittiğini bilmek için yeterli değildir. Bunun için üzgünüm. – PeterWong

13

yorumlarda soru takip tomblomfield:

AA ActiveAdmin.register Modeli do izlemeyi deneyin blok:

controller do 
    def scoped_collection 
     YourModel.includes(:add_your_includes_here) 
    end 
    end 

Bunun günümüze ayrı bir sorgudaki her indeks sayfası için tembel yük tüm dernekler Eğer hekimler modeli

yılında

has_many :appointments, ->{ includes(:patients) }, :through => :patients 

yapabilirsiniz @tomblomfield @monfresh

HTH

+1

'scoped_collection'' show' görünümünde çağrılmadı, bu yüzden 'show' görünümünde N + 1 sorgularından bahsedildiği için bu, tomblomfield'ın sorununu çözmeyecek. Ben de buna koşuyorum ve bir çözüm bulamadım. – monfresh

+0

Bence aradığınız şey foo.includes (: barlar) .find (params [: id]) 'yi çalıştırabileceğiniz 'def find_resource' – Tashows

0

... ya, sana formtastic ile kullanabilirsiniz emin değilim ama

has_many :appointments :through => :patients do 
    def with_patients 
    includes(:patients) 
    end 
end 
01 gibi bir şeyle kapsamı opsiyonel yapabilir

ve appointment.patient any n + 1 artık

1

N + 1 sorgu problemini çözmelidir.

show do 
    panel "Patients" do 
    patients = physician.patients.includes(:appointments) 
    table_for patients do 
     column :name 
     column :appointment_date { |patient| patient.appointments.first.appointment_date } 
    end 
    end 
end 
0

bir pano satırda göstermek birden alanını istiyorsanız aşağıdaki görünümü kullanabilirsiniz:

permit_params: appointment_ids:[] 
: REDIT izin listeye ilk koymak appointment_ids oluştururlar size yerleştirmek için

show do |phy| 
    panel "Details" do 
     attributes_table do 
      ... # Other fields come here 
      row :appointment_dates do 
      apps="" 
      phy.appointments.all.each do |app| 
       apps += app.patient.name + ":" + app.appoinment_date + ", " 
      end 
      apps.chomp(", ") 
      end 
     end  
    end 
end 

Ekle formu ile ilişkili birçok formül var

form do |f| 
    f.has_many :appointments do |app| 
    app.inputs "Appointments" do 
     app.input :patients, :as => :select, :label => "Assigned Patients" 
     app.input :appointment_date 
    end 
    end 
end 
01 Kodlama hatası yoksa,

Çalışmalıdır.

1

O (seçilen) ile benim için iş bu er diyagramı oluşturmak için ne kullandı

permit_params category_ids: [] 

form do |f| 
    inputs 'Shop' do 
    input :category_ids, collection: Category.all.collect {|x| [x.name, x.id]}, as: :select, multiple: true, input_html: { class: "chosen-input", style: "width: 700px;"} 
    end 
    f.actions 
end