Forum: Rails-ES Crear categorías de producto

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
7cc80e366962ecdea03eb1b150f6abf1?d=identicon&s=25 Fernando Val (aaromnido)
on 2009-05-04 10:06
(Received via mailing list)
Hola de nuevo,

Necesito crear un modelo Speciality para crear las especialidades
(médicas) de los usuarios (modelo User)
En principio solo va a tener dos niveles:
- specilities
-- subespecialities
(supongo que la pluralización será esa)
Pero no es descartable que más adelante pueda haber más niveles.

Me suena que tengo que hacer una relacion del modelo consigo mismo y
utilizar "acts_a_tree". Pero no se ahora mismo cómo montar todo el
tema a nivel controlador y vistas.

Mi idea de cómo montarlo:
Una migración tal que
así.    t.string  :name
    t.integer :parent_id


Class Speciality
 acts_as_tree :order => "name"

 belongs_to :parent, :class_name => "Speciality"
 has_many :children, :class_name => "Speciality" ,
   :foreign_key => "parent_id" ,
   :order => "name" ,
   :dependent => :destroy
 end

Class User
 # Otras relaciones
 belongs_to_many :specialities

¿Hasta ahí bien no?

Pues a partir de ahí no se cómo seguir.
He buscado refenrencias en los libros y tutoriales en Google pero no
encuentro nada que me de pistas.

¿Algun tutorial de referencia?


Muchas gracias de antemano.

--
Fernando Val
Web Designer
http://www.fernandoval.es
7cc80e366962ecdea03eb1b150f6abf1?d=identicon&s=25 Fernando Val (aaromnido)
on 2009-05-04 20:49
(Received via mailing list)
He avanzado algo gracias un mini tutorial algo viejo que he encontrado
por ahí, pero que he tratado de adaptar a REST:
http://railsforum.com/viewtopic.php?id=1560

He instalado el plugin "acts_a_tree"

Tengo el modelo
así:class Category < ActiveRecord::Base
  acts_as_tree :order => "name"

  # Validations
  validates_presence_of :name
  validates_numericality_of :parent_id
end

He metido tres categorías en la tabla:
parent_id, name, id
0 Specialities 1
1 Surgery 2
2 Internal Surgery 3


El controlador:
  def index
    @categories = Category.find(:all)
  end

Y la vista index.html.rb:
<ul>
   <% for category in Category.find_all_by_parent_id(nil) %>
   <li>
   <%= category.name  %>
     <% if Category.find_all_by_parent_id(category).empty? %>
     <span>no subcategories</span>
     <% else %>
       <ul><% for category in Category.find_all_by_parent_id(category)
%>
         <li>
         <%= category.name  %>
         </li>
         <% end %>
       </ul>
     <% end %>
   </li>
   <% end %>
  </ul>

No me da ningún error, pero no me pinta nada.
¿Alguien puede echarle un ojo al código, a ver que hago mal?
Sospecho que el problema está en el view...
Un alma caritativa po dió... :-)


El día 4 de mayo de 2009 10:05, Fernando <aaromnido@gmail.com>
escribió:> Me suena que tengo que hacer una relacion del modelo consigo mismo y
>
>
>
> --
> Fernando Val
> Web Designer
> http://www.fernandoval.es
>



--
Fernando Val
Web Designer
http://www.fernandoval.es
7cc80e366962ecdea03eb1b150f6abf1?d=identicon&s=25 Fernando Val (aaromnido)
on 2009-05-04 22:38
(Received via mailing list)
Bueno, he encontrado un ejemplo que me ha abierto un poco la luz.
Bffff, pero me ha costado encontrar algo que explique para dummies como
yo...
http://snippets.dzone.com/posts/show/1919

Ahora sólo me queda aderezar un poco el formulario de new y edit para
no poner el id del padre, sino que me despliegue un select con las
categorías...
Eso creo que podré hacerlo, si me atasco os pido ayuda.

Un saludito.

El día 4 de mayo de 2009 20:47, Fernando <aaromnido@gmail.com>
escribió:>  validates_presence_of :name
> El controlador:
>     <span>no subcategories</span>
>  </ul>
>> (médicas) de los usuarios (modelo User)
>> Mi idea de cómo montarlo:
>>   :order => "name" ,
>> He buscado refenrencias en los libros y tutoriales en Google pero no
>> http://www.fernandoval.es
>>
>
>
>
> --
> Fernando Val
> Web Designer
> http://www.fernandoval.es
>



--
Fernando Val
Web Designer
http://www.fernandoval.es
7cc80e366962ecdea03eb1b150f6abf1?d=identicon&s=25 Fernando Val (aaromnido)
on 2009-05-05 00:29
(Received via mailing list)
Nada, que se me atasca el formulario.
Tengo el siguiente método en el controller:
  def new
    @categories = Category.find(:all) # Cargo todas las categorías
    @category = Category.new
  end

Y en la vista del _form:
    <%= f.label :parent_specialitie %><br />
    <%= f.collection_select(:category, @categories, :id, :name) %>

Y nada, me dice que:
---------------------------------------------------------------------------------------------------------
undefined method `category' for #<Category:0x5b9f474>

Extracted source (around line #12):

9:   </p>
10:   <p>
11:     <%= f.label :parent_id %><br />
12:     <%= f.collection_select(:category, @categories, :id, :name) %>
13:   </p>
14:   <p>
15:     <%= f.submit "Update" %>
--------------------------------------------------------------------------------------------------------

Creo que el problema está al llamarse a sí mismo cómo modelo ":category".
Pero no hayo la solución. Incluso he puesto la
relación"has_and_belongs_to_many :categories" en el modelo.
Pero nada, sigue dando el mismo problema.
¿Alguien sabe que me pasa?

Gracias de antemano.


El día 4 de mayo de 2009 22:37, Fernando <aaromnido@gmail.com>
escribió:>
>>  validates_presence_of :name
>> El controlador:
>>     <span>no subcategories</span>
>>  </ul>
>>> (médicas) de los usuarios (modelo User)
>>> Mi idea de cómo montarlo:
>>>   :order => "name" ,
>>> He buscado refenrencias en los libros y tutoriales en Google pero no
>>> http://www.fernandoval.es
>
>
> --
> Fernando Val
> Web Designer
> http://www.fernandoval.es
>



--
Fernando Val
Web Designer
http://www.fernandoval.es
9e94436f8f108df3894576778ad26c14?d=identicon&s=25 Diego Fernandez (Guest)
on 2009-05-05 10:02
(Received via mailing list)
2009/5/5 Fernando <aaromnido@gmail.com>

> Nada, que se me atasca el formulario.
> Tengo el siguiente método en el controller:
>  def new
>    @categories = Category.find(:all) # Cargo todas las categorías
>    @category = Category.new
>  end
>
> Y en la vista del _form:
>    <%= f.label :parent_specialitie %><br />
>    <%= f.collection_select(:category, @categories, :id, :name) %>


Uhm...¿<%= f.collection_select(:parent_id, @categories, :id, :name) %>?

No sé si se me está escapando algo.

--
Diego Fernández Fernández

http://walkaways.es
http://simplelogica.net
7cc80e366962ecdea03eb1b150f6abf1?d=identicon&s=25 Fernando Val (aaromnido)
on 2009-05-05 11:12
(Received via mailing list)
Creo que también probé así, pero lo vuelvo a intentar...

El día 5 de mayo de 2009 10:01, Diego Fernandez
<diego.fernandez.fernandez@gmail.com>
escribió:>>
>
> http://walkaways.es
> http://simplelogica.net
>
> _______________________________________________
> Ror-es mailing list
> Ror-es@lists.simplelogica.net
> http://lists.simplelogica.net/mailman/listinfo/ror-es
>
>



--
Fernando Val
Web Designer
http://www.fernandoval.es
7cc80e366962ecdea03eb1b150f6abf1?d=identicon&s=25 Fernando Val (aaromnido)
on 2009-05-05 11:18
(Received via mailing list)
Por cierto, el primer parametro no dice la API de Rails que debe ser
el object?. Yo ahí por object entendí el modelo.
Pero debo estar equivocado... es mi novatez.  ;-)

Lo dicho ahora cuando tenga un rato en el curro, lo pruebo y os cuento.

El día 5 de mayo de 2009 11:11, Fernando <aaromnido@gmail.com>
escribió:>>>    @categories = Category.find(:all) # Cargo todas las categorías
>>
>>
>>
>
>
>
> --
> Fernando Val
> Web Designer
> http://www.fernandoval.es
>



--
Fernando Val
Web Designer
http://www.fernandoval.es
7cc80e366962ecdea03eb1b150f6abf1?d=identicon&s=25 Fernando Val (aaromnido)
on 2009-05-05 11:56
(Received via mailing list)
Gracias Diego, ahora rula perfecto.

Era error de novato, jejejeje.

Por cierto, una preguntilla:
¿El has_an_belongs_to_many en el modelo, es necesario, o con el plugin
del acts_a_tree ya no hace falta?

Lo digo, porqueen el tuto que acts_a_tree, no dice que sea neceario.
Se lo he puesto yo porque me lo dictaba la lógica.

El día 5 de mayo de 2009 11:14, Fernando <aaromnido@gmail.com>
escribió:>>>
>>>>    <%= f.label :parent_specialitie %><br />
>>> http://simplelogica.net
>> --
> http://www.fernandoval.es
>



--
Fernando Val
Web Designer
http://www.fernandoval.es
9e94436f8f108df3894576778ad26c14?d=identicon&s=25 Diego Fernandez (Guest)
on 2009-05-05 11:57
(Received via mailing list)
2009/5/5 Fernando <aaromnido@gmail.com>

> Por cierto, el primer parametro no dice la API de Rails que debe ser
> el object?. Yo ahí por object entendí el modelo.
> Pero debo estar equivocado... es mi novatez.  ;-)


La documentación de la API especifica que collection_select recibe
object,
method, collection, value_method, text_method, options = {},
html_options =
{}; Y no sé que más decirte... tu le pasas... otras cosas u en otro
orden.

f.collection_select(:category, @categories, :id, :name)

Me supongo que tienes un form_builder parecido a esto:

<% form_for @category do |f| %>
[...]
<% end %>

En ese caso <%= f.collection_select(:parent_id, @categories, :id, :name)
%>
es lo mismo que <%= collection_select(:category, :parent_id,
@categories,
:id, :name) %>



> >> 2009/5/5 Fernando <aaromnido@gmail.com>
> >>>    <%= f.collection_select(:category, @categories, :id, :name) %>
> >>
> > Fernando Val
> _______________________________________________
> Ror-es mailing list
> Ror-es@lists.simplelogica.net
> http://lists.simplelogica.net/mailman/listinfo/ror-es
>



--
Diego Fernández Fernández

http://walkaways.es
http://simplelogica.net
7cc80e366962ecdea03eb1b150f6abf1?d=identicon&s=25 Fernando Val (aaromnido)
on 2009-05-05 11:59
(Received via mailing list)
Si si, si exacto.

El día 5 de mayo de 2009 11:56, Diego Fernandez
<diego.fernandez.fernandez@gmail.com>
escribió:> {}; Y no sé que más decirte... tu le pasas... otras cosas u en otro 
orden.
> :id, :name) %>
>> >>
>> >>>    <%= f.label :parent_specialitie %><br />
>> >> http://simplelogica.net
>> > --
>> http://www.fernandoval.es
> http://walkaways.es
> http://simplelogica.net
>
> _______________________________________________
> Ror-es mailing list
> Ror-es@lists.simplelogica.net
> http://lists.simplelogica.net/mailman/listinfo/ror-es
>
>



--
Fernando Val
Web Designer
http://www.fernandoval.es
9e94436f8f108df3894576778ad26c14?d=identicon&s=25 Diego Fernandez (Guest)
on 2009-05-05 12:13
(Received via mailing list)
2009/5/5 Fernando <aaromnido@gmail.com>

> Gracias Diego, ahora rula perfecto.
>
> Era error de novato, jejejeje.
>
> Por cierto, una preguntilla:
> ¿El has_an_belongs_to_many en el modelo, es necesario, o con el plugin
> del acts_a_tree ya no hace falta?


 No hace ninguna falta.

Tengo en cuenta que estás empezando, ahora bien, creo que deberías
parate un
poco a leer o releer alguno de los innumerables
documentos/tutoriales/ejemplos introductorios. Deberías comprender bien
que
son las asociaciones y para qué sirven. Luego pasar a los form_builders,
form_helpers y ver como todo eso encaja. Dejar que todo eso se asiente
bien.
Hacer ejemplos de un tamaño que controles, que sepas lo que está
pasando.

En mi opinión, sin tener una buena base sobre estos y otros conceptos me
parece un poco kamikaze ponerse a desarrollar una aplicación que a las
primeras de cambio "parece" necesitar de una estructura en árbol
autorefereciada.

--
Diego Fernández Fernández

http://walkaways.es
http://simplelogica.net
7cc80e366962ecdea03eb1b150f6abf1?d=identicon&s=25 Fernando Val (aaromnido)
on 2009-05-05 14:24
(Received via mailing list)
Te doy toda la razón en la segunda parte de tu planteamiento, pero no
en la primera. Me explico:

Partimos de la base, que no soy programador (soy diseñador), pero me
gusta muchísimo.
Hace algo más de dos años que empecé con Rails, pero por distintos
motivos mi aprendizaje ha tenido que parar en varias ocasiones.
Ahora llevo unos dos otres meses que me he metido a saco, caiga quien
caiga. He decidido que tengo que aprender ya de un vez.
Durante todo este tiempo he ido leyendo libros un poco por encima y
por hobbie, también en internet. Últimamente estoy leyendo
másintensivamente. He echo bastantes tutoriales. Pero me encuentro con
que tengo una idea muy teórica de Rails, pero no se por donde empezar.
Así que he decidido "echarme al monte" en plan "kamikaze" cómo tu
dices y empezar a montar una aplicación de verdad con problemas de
verdad. No es ninguna aplicación real, es una toy-application a la que
le voy añadiéndole funcionalidades sobre la marcha.
Quizas os doy un poco la lata con mis torpezas, pero te aseguro que es
más por lo dificil que me resulta todo esto, que por falta de
empeñoen documentarme, googlear, etc.
Cómo soy consciente de ello, procuro aportar las soluciones que yo
mismo encuentro (las menos :-) ), para que así le pueda servir a otro.
Y ese es el tema, Diego. Muchas gracias.



El día 5 de mayo de 2009 12:12, Diego Fernandez
<diego.fernandez.fernandez@gmail.com>
escribió:>> del acts_a_tree ya no hace falta?
> En mi opinión, sin tener una buena base sobre estos y otros conceptos me
> _______________________________________________
> Ror-es mailing list
> Ror-es@lists.simplelogica.net
> http://lists.simplelogica.net/mailman/listinfo/ror-es
>
>



--
Fernando Val
Web Designer
http://www.fernandoval.es
9e94436f8f108df3894576778ad26c14?d=identicon&s=25 Diego Fernandez (Guest)
on 2009-05-05 15:12
(Received via mailing list)
Te entiendo.

Muchas de nadas :)
--
Diego Fernández Fernández

http://walkaways.es
http://simplelogica.net
Adce10d7f1dbabcdab8f525a59cec32f?d=identicon&s=25 Andrés Gutiérrez (andresgutgon)
on 2009-05-10 14:34
(Received via mailing list)
Mucho ánimo Fernando!

El 5 de mayo de 2009 15:11, Diego Fernandez <
diego.fernandez.fernandez@gmail.com> escribió:
This topic is locked and can not be replied to.