Problema con una query

hola veran, tengo una query:

def serie
@serie = Anime.find(params[:id], :joins=>“INNER JOIN articulos ON
animes.id = articulos.anime_id”)
render :action => ‘series’
end

y esta es mi vista:

<%= @serie.nombre %>

> Género: <%= @serie.Genero %>

Duración: <%= @serie.duracion %>

Fecha: <%= @serie.Fecha %>

Artículos relaciondos: <%= link_to @serie.titulo, :action => 'articulo', :id => @serie.id %>

el problema es que por mas de tener 1 articulo relacionado se muestra 1
solo, he probado poniendole :limit => 2 pero se sigue mostrando uno
solo, alguien sabe donde esta el problema? quizas podria tratarlo como
un array pero no se como hacerlo, gracias de antemano

On Wednesday 11 April 2007 13:26:49 Crohno wrote:

link_to @serie.titulo, :action => 'articulo', :id => @serie.id %>

el problema es que por mas de tener 1 articulo relacionado se muestra 1
solo, he probado poniendole :limit => 2 pero se sigue mostrando uno
solo, alguien sabe donde esta el problema? quizas podria tratarlo como
un array pero no se como hacerlo, gracias de antemano

No estoy seguro de entenderte. Si lo que quieres es obtener una serie y
sus
artículos relacionados, será más sencillo hacer algo como:

@serie = Anime.find(params[:id]) # puedes añadir :include => :articulos

Y después acceder a @serie.articulos.

Sin embargo, en la vista no accedes en ningún momento a la
relacion “articulos”. ¿Me estoy perdiendo algo?

Saludos.


Imobach González Sosa
correo-e: imobachgs en banot punto net
jabber id: osoh en jabberes punto org
web: banot.net - banot Resources and Information.
blog: http://devnull.blogs.banot.net/

On 4/11/07, Crohno [email protected] wrote:

hola veran, tengo una query:

def serie
@serie = Anime.find(params[:id], :joins=>“INNER JOIN articulos ON
animes.id = articulos.anime_id”)
render :action => ‘series’
end

Creo que el problema es que estás haciendo un #find por ID y agregando
el JOIN “a mano”.

Fijate en los logs, probablemente verás que el #find por ID hace un
LIMIT 1 (lo cual tiene sentido). Por esto es que estás recibiendo
sóloel primer item de la
colección.
Intenta lo que te sugiere Imobach, que además es mucho más chulo y semántico.

@serie = Anime.find(params[:id], :include => :articulos)

Saludos!

muchas gracias, sin embargo al usar
link_to @serie.articulo.titulo no me funciona, pero si pongo link_to
@serie.articulo me funciona, pero me sale un # por cada articulo que
hay, alguien sabe como puedo hacer para que funcione?

muchas gracias, sin embargo al usar
link_to @serie.articulo.titulo no me funciona, pero si pongo link_to
@serie.articulo me funciona, pero me sale un # por cada articulo que
hay, alguien sabe como puedo hacer para que funcione?
ademas me gustaria poder tratarlo como un array para poder separarlos,
por que si no lo tratra a todo como un solo objeto, lo cual tampoco me
sirve(si se puede solucionar de otra forma tb me sirve.

Perdon por el doble post

El Wednesday 11 April 2007 15:44:33 Crohno
escribió:> muchas gracias, sin embargo al usar

link_to @serie.articulo.titulo no me funciona, pero si pongo link_to
@serie.articulo me funciona, pero me sale un # por cada articulo que
hay, alguien sabe como puedo hacer para que funcione?
ademas me gustaria poder tratarlo como un array para poder separarlos,
por que si no lo tratra a todo como un solo objeto, lo cual tampoco me
sirve(si se puede solucionar de otra forma tb me sirve.

Si no entendí mal, una serie “has many” articulos, ¿no? Entonces, deberías
poder acceder a @serie.articulos (nótese el plural), que te devuelve
algo “parecido” a un array (se comporta como tal). Si quieres, puedes
hacer
esas pruebas en la consola (ruby script/console) para cerciorarte.

Si no te aclaras, déjanos ver los modelos (por si acaso haya algo raro).

Perdon por el doble post

No hay problema.

Un saludo.


Imobach González Sosa
imobachgs en banot punto net
osoh en jabberes punto org

voy a ponerte las cosas aqui porque no va(perdon por las molesias)

anime.rb:
class Anime < ActiveRecord::Base
has_many :articulo
end

articulo.rb:
class Articulo < ActiveRecord::Base
belongs_to :anime
end

index_controller.rb:

def serie
  @serie = Anime.find(params[:id], :include => :articulo)
  render :action => 'series'
end

def articulo
   @articulo = Articulo.find(params[:id], :joins=>"INNER JOIN animes 

ON articulos.anime_id = animes.id")
render :action => ‘articulo’
end

series.rhtml:

<%= @serie.nombre %>

> Género: <%= @serie.Genero %>

Duración: <%= @serie.duracion %>

Fecha: <%= @serie.Fecha %>

Artículos relaciondos: <%= link_to @serie.articulo, :action => 'articulo', :id => @serie.id %>



<%= image_tag 'volver.png', :class => 'non' %> <%= link_to 'volver', :action => 'animes' %>

si alguien es tan amable de solucionarlo se lo agradeceria

pues es raro pero sigue sin funcionar, ya he probado otra maneras pero
nada :S si algun guru de rails lo descubre pues muchas gracias

El Wednesday 11 April 2007 17:01:01 Crohno
escribió:> voy a ponerte las cosas aqui porque no va(perdon por las molesias)

anime.rb:
class Anime < ActiveRecord::Base
has_many :articulo
end

A no ser que configures ActiveRecord para ignorar los plurales, esto
debería
ser
así:
has_many :articulos

articulo.rb:
class Articulo < ActiveRecord::Base
belongs_to :anime
end

Ese estaba bien.

index_controller.rb:

def serie
  @serie = Anime.find(params[:id], :include => :articulo)
  render :action => 'series'
end

Ahora, por lo que veo en la siguiente línea (de la vista) lo que quieres
es
listar todos los artículos de una serie, ¿no? Y como parámetro le pasas el
identificador de la serie.

<%= link_to @serie.articulo, :action => ‘articulo’, :id => @serie.id %>

Así que el método artículo podría ser algo como:

def articulo
@articulos = Articulo.find_by_serie_id(params[:id])
end

O, si quieres, a más alto nivel:

def articulo
@serie = Serie.find(params[:id]) # Lo dejo como atributo por si
quieres
# acceder a él en la vista
@articulos = @serie.articulos
end

Espero que eso te ayude.

Un saludo.


Imobach González Sosa
imobachgs en banot punto net
osoh en jabberes punto org

El Wednesday 11 April 2007 22:58:02 Crohno
escribió:> pues es raro pero sigue sin funcionar, ya he probado otra maneras pero

nada :S si algun guru de rails lo descubre pues muchas gracias

¿Pero qué error te da exactamente?

Saludos.


Ror-es mailing list
[email protected]

asi funciona, el unico problema es uqe muestra solo el primero(si cambio
el [0] por [1] muestra el segundo, he intentado hacer un while pero no
se muy bien como hacerlo(soy n00b en en rails, vengo de php) ni donde,
debo de hacerlo en el controlador o en la vista? alguien sabe donde
puedo aprender a hacer loops?

Hola chicos,

has probado de esta forma?

Artículos relaciondos:
<% for articulo in @serie.articulo %>
<%=link_to @articulo.titulo , :action => ‘articulo’, :id =>
@serie.id%>

<%end>

o bien

<%=link_to @serie.articulo[0].titulo , :action => ‘articulo’, :id => @
serie.id %>

Perdonad pero por falta de tiempo no he podido probar esta solución (así
a
pelo no recuerdo si es con plural “articulos”)

El día 12/04/07, Benjamín Cárdenas Salamandra [email protected]
escribió:

El Thursday 12 April 2007 15:48:51 Crohno
escribió:> asi funciona, el unico problema es uqe muestra solo el primero(si cambio

el [0] por [1] muestra el segundo, he intentado hacer un while pero no
se muy bien como hacerlo(soy n00b en en rails, vengo de php) ni donde,
debo de hacerlo en el controlador o en la vista? alguien sabe donde
puedo aprender a hacer loops?

Te sugiero que antes de meterte con Rails, aprendas algo de Ruby, porque
todo
te va a ser más fácil. Al menos las cosas básicas.

En Ruby existen bucles como en cualquier lenguaje (loop, while, for),
aunque
el “estilo Ruby” a la hora de iterar es usar “iteradores” como, por
ejemplo, “each”.

un_array = [1, 2, 3]
un_array.each { |x| puts x }

“each” recibe un “bloque” como parámetro (lo que está entre llaves), y
ejecuta
dicho bloque para cada elemento (el método ‘each’ pone cada elemento en la
variable ‘x’).

Pero como supongo que esto será nuevo para ti, puedes optar por otro modo
más “tradicional”:

un_array = [1, 2, 3]
for i in un_array do
puts i
end

Lo dicho, empieza por Ruby y verás que todo se vuelve más sencillo.

Saludos.


Imobach González Sosa
imobachgs en banot punto net
osoh en jabberes punto org