2014-05-22 10 views
12

mam następujące modele:Wiele właściwości HABTM z ActiveAdmin i Rails 4: Dane nie zostały zapisane

class Programme < ActiveRecord::Base 

    has_and_belongs_to_many :nationalities, class_name: 'Nation', join_table: 'nationalities_nations' 
    has_and_belongs_to_many :destinations, class_name: 'Nation', join_table: 'destinations_nations' 

    accepts_nested_attributes_for :nationalities 
    accepts_nested_attributes_for :destinations 

end 

i

class Nation < ActiveRecord::Base 

    has_and_belongs_to_many :nationality_programmes, class_name: 'Programme', join_table: 'nationalities_nations' 
    has_and_belongs_to_many :destination_programmes, class_name: 'Programme', join_table: 'destinations_nations' 

    accepts_nested_attributes_for :nationality_programmes 
    accepts_nested_attributes_for :destination_programmes 

end 

w Active Administrator mam następującą konfigurację, która wstępnie wybiera dowolny istniejący prawidłowo zapisano numery referencyjne dla kraju (patrz zrzut ekranu).

ActiveAdmin.register Programme do 

    permit_params :title, 
      destinations_ids: [:id], 
      nationalities_ids: [:id] 


    form do |f| 
    f.actions 
    f.inputs 'Countries/Regions' do 
     f.input :nationalities, :as => :select, :input_html => {:multiple => true} 
     f.input :destinations, :as => :select, :input_html => {:multiple => true} 
     f.input :title 
    end 
    f.actions 
    end 
end 

Jednak po wybraniu innych krajów formularz pomyślnie zapisuje, ale odwołania nie są przechowywane.

To jest mój schemat:

ActiveRecord::Schema.define(version: 20140522131219) do 

    create_table "destinations_nations", force: true do |t| 
    t.integer "programme_id", null: false 
    t.integer "nation_id", null: false 
    end 

    create_table "levels_programmes", force: true do |t| 
    t.integer "programme_id", null: false 
    t.integer "level_id",  null: false 
    end 

    create_table "nationalities_nations", force: true do |t| 
    t.integer "programme_id", null: false 
    t.integer "nation_id", null: false 
    end 

    create_table "nations", force: true do |t| 
    t.string "slug",  limit: 2 
    t.string "name" 
    end 

    create_table "programmes", force: true do |t| 
    t.string "title" 
    end 

end 

enter image description here

Aktualizacja: Trasy pisał ten problem na active_admin#3196 który jest obecnie zamknięty, dzięki pomocy Gregorio.

Odpowiedz

20

Zrobiłem to działa przez zmianę

permit_params :title, 
     destinations_ids: [:id], 
     nationalities_ids: [:id] 

do

permit_params :title, 
     destination_ids: [], 
     nationality_ids: [] 
+0

Gdzie można znaleźć dokumentację dotyczącą rozwiązania? Skąd ten pomysł ? – Defoncesko

+1

Właśnie przyjrzał się dzienniki i zobaczył 'niedozwolonej parametr: destination_ids' Więc activeadmin próbował wysłać ten parametr zamiast ' destinations_ids: [: id] ' –

+0

ok dzięki za opinie – Defoncesko

Powiązane problemy