2012-07-10 11 views
5

¿Es posible agregar un formulario anidado a la página #show?Formulario anidado ActiveAdmin en la página #show

Ahora tengo mi admin/posts.rb:

ActiveAdmin.register Post do 
    show do |post| 
    h2 post.title 
    post.comments.each do |comment| 
     row :comment do comment.text end 
    end 
    end 
end 

En él se enumeran todos los comentarios para el post. Ahora necesito un formulario para agregar nuevos comentarios. que estoy tratando de hacer como esto:

ActiveAdmin.register Post do 
    show do |post| 
    h2 post.title 
    post.comments.each do |comment| 
     row :comment do comment.text end 
    end 

    form do |f| 
     f.has_many :comments do |c| 
     c.input :text 
     end 
    end 
    end 
end 

y obtener un error:

undefined method `has_many' for <form></form> :Arbre::HTML::Form

Modelos de Post y Comentarios ven como:

class Post < ActiveRecord::Base 
    has_many :comments 
    accepts_nested_attributes_for :comments 
end 

class Comment < ActiveRecord::Base 
    belongs_to :post 
end 

¿Cómo puedo añadir que la forma a mi página de presentación? Gracias

Respuesta

8

utilizo la siguiente receta al añadir este tipo de información a un espectáculo página

ActiveAdmin.register Post do 
     show :title => :email do |post| 
     attributes_table do 
      row :id 
      row :first_name 
      row :last_name 
     end 
     div :class => "panel" do 
      h3 "Comments" 
      if post.comments and post.comments.count > 0 
      div :class => "panel_contents" do 
       div :class => "attributes_table" do 
       table do 
        tr do 
        th do 
         "Comment Text" 
        end 
        end 
        tbody do 
        post.comments.each do |comment| 
         tr do 
         td do 
          comment.text 
         end 
         end 
        end 
        end 
       end 
       end 
      end 
      else 
      h3 "No comments available" 
      end 
     end 
     end 
    end 
+0

¿Cómo agregamos un área de texto de entrada para comentarios? – WarLord

21

hice algo como esto para una relación has_one:

ActiveAdmin.register Post do 
    show :title => :email do |post| 

    attributes_table do 
     rows :id, :first_name, :last_name 
    end 

    panel 'Comments' do 
     attributes_table_for post.comment do 
     rows :text, :author, :date 
     end 
    end 

    end 
end 

Si no lo hizo Necesito la flexibilidad adicional de la solución de sorens. Apuesto a que podrías trabajar con eso.

+0

Esta solución es mucho más limpia :) –

+0

¿Alguna idea de cómo cambiar la etiqueta del artículo de la fila? –

+1

puede definir '' 'rows''' por separado y pasar un bloque como este:' '' row ("su título") {post.first_name} '' ' – Jim

Cuestiones relacionadas