2013-06-19 6 views
8

Ho 2 modelli. Categoria e posta. Sono connessi utilizzando una relazione has_many_and_belongs_to_many. Ho controllato la console di rails e la relazione funziona.ActiveAdmin non salverà ne ha molti e appartiene a molti campi

ho creato le caselle di controllo in activeadmin per impostare le categorie di post utilizzando questo campo del modulo:

f.input :categories, as: :check_boxes, collection: Category.all 

Il problema è quando provo a salvarla perché ogni altro i dati dei campi (titolo, corpo, meta informazioni etc.) viene salvato, ma la categoria rimane invariata anche se l'ho deselezionata o ne ho spuntata un'altra.

sto usando parametri di forza in questo modo:

post_params = params.require(:post).permit(:title,:body,:meta_keywords,:meta_description,:excerpt,:image,:categories) 

Si prega di darmi qualche suggerimento per rendere amministrazione attiva salvare le categorie troppo!

i migliori auguri, Matt

risposta

9

Prova questo in AA:

controller do 
     def permitted_params 
     params.permit post: [:title, :body, :meta_keywords, :meta_description, :excerpt, :image, category_ids: []] 
     end 
    end 
4

Mettete qualcosa di simile in /app/admin/post.rb:

ActiveAdmin.register Post do 
    permit_params :title, :body, :meta_keywords, :meta_description, :excerpt, :image, category_ids: [:id] 
end 

Se si utilizza accept_nested_attributes_for quindi sarebbe simile a questa:

ActiveAdmin.register Post do 
    permit_params :title, :body, :meta_keywords, :meta_description, :excerpt, :image, categories_attributes: [:id] 
end 
0

che ho provato, questo potrebbe lavora per voi e altri pure

# This is to show you the form field section 
form do |f| 
    f.inputs "Basic Information" do 
     f.input :categories, :multiple => true, as: :check_boxes, :collection => Category.all 
    end 
    f.actions 
end 

# This is the place to write the controller and you don't need to add any path in routes.rb 
controller do 
    def update 
     post = Post.find(params[:id]) 
     post.categories.delete_all 
     categories = params[:post][:category_ids] 
     categories.shift 
     categories.each do |category_id| 
      post.categories << Category.find(category_id.to_i) 
     end 
     redirect_to resource_path(post) 
    end 
end 

Ricordarsi di permettere gli attributi se si sta utilizzando i parametri di forza, come pure (vedi risposta zarazan sopra: D)

Riferimenti presi da http://rails.hasbrains.org/questions/369