Problemas con relacion de tabla

Hola como estan.

Nuevamente yo aqui haciendo preguntas, disculpen la molestia.

tengo dos modelos uno “obras” y el otro “series_obras”

class Obra < ActiveRecord::Base
belongs_to :series_obra ,:foreign_key =>“que_serie”
end

class SeriesObra < ActiveRecord::Base
has_many :obras, :foreign_key =>“que_serie”
end

en mi controller :

@series_obras =
SeriesObra.find(:all,:conditions=>{:quien_usr=>‘1’},:order=>‘fecha
desc’)

y en mi vista :

<% for series in @series_obras %>
<% if series.obras[0].nil? %>
no hay registro
<% else %>

<%= series.obras[0].foto %>

      <%end%>
     <%end%>

bueno la idea es acceder a la tabla obras desde la tabla series_obras,
pero
no me encuentra el registro nunca es decir series.obras[0] es nil ,
siendo
que sí tengo los registros vinculados en mi base de datos ,entonces lo
deberia encontrar.

¿que puedo estar haciendo mal?

Saludos

Miguel Michelson wrote:

class Obra < ActiveRecord::Base
belongs_to :series_obra ,:foreign_key =>“que_serie”
end

class SeriesObra < ActiveRecord::Base
has_many :obras, :foreign_key =>“que_serie”
end

en mi controller :

@series_obras =
SeriesObra.find(:all,:conditions=>{:quien_usr=>‘1’},:order=>‘fecha
desc’)

y en mi vista :

<% for series in @series_obras %>
<% if series.obras[0].nil? %>
no hay registro
<% else %>

<%= series.obras[0].foto %>

      <%end%>
     <%end%>

bueno la idea es acceder a la tabla obras desde la tabla series_obras,
pero
no me encuentra el registro nunca es decir series.obras[0] es nil ,
siendo
que sí tengo los registros vinculados en mi base de datos ,entonces lo
deberia encontrar.

¿que puedo estar haciendo mal?

Saludos

@series_obras = SeriesObra.find(:all, :conditions => [“quien_usr = ?”,
“1”], :order=> “fecha desc”, :include => [“obras”])

Espero te sirva.

Jaime Mora R.

Hola Miguel Michelson, me parece que estas accediendo mal a la
asociacion,
prueba con esto
<% for series in @series_obras %>
<% unless series.obras.any? %>
no hay registro
<% else %>
<%= series.obras.foto %>
<%end%>

<%end%>

Saludos.
El día 29/10/07, Jaime Mora R. [email protected]
escribió:

Hola como estan:

con la primera solucion , que me dio Jaime, me salio un error de my sql

Mysql::Error: Unknown column ‘series_obras.id’ in ‘field list’: SELECT
series_obras.id AS t0_r0, series_obras.id_serie AS t0_r1,
series_obras.nombre_serie AS t0_r2, series_obras.descr_serie AS
t0_r3, series_obras.fecha AS t0_r4, series_obras.quien_usr AS
t0_r5, obras.id AS t1_r0, obras.foto AS t1_r1, obras.titulo AS
t1_r2, obras.tecnica AS t1_r3, obras.medidas AS t1_r4,
obras.descripcion AS t1_r5, obras.quien AS t1_r6,
obras.que_serie AS t1_r7, obras.publica AS t1_r8, obras.posicion
AS t1_r9 FROM series_obras LEFT OUTER JOIN obras ON
obras.que_serie = series_obras.id WHERE (series_obras.quien_usr = 1)
ORDER BY fecha desc

es que la clave primaria de series obras es id_serie

, la segunda solución, que me dió Ruben , tampoco funcionó, en un
principio, ya que tuve que cambiar la clave primaria de
series_obras.id_serie a series_obra.id. ahi si funcionó.

en el caso de el ejemplo de Jaime , lo probé con el nuevo id de la tabla
y
no me arrojó error, pero no supe como acceder al registro de obras desde
la
consulta series_obras.

aprovechando la instancia, me gustaría saber , por ejemplo en el caso
hipotectico en el cual yo quisiera solo llamar a las obras con el campo
":publicado =>‘Y’. ¿donde seria mejor poner esa condicion?¿desde el
unless
de la vista ?¿o desde el controller o el modelo? ojala se entienda la
pregunta.

muchas gracias a los dos por la valiosa ayuda

Saludos

pero cambie el nombre de la clave primaria

Miguel, puedes haces esta belleza:

class SeriesObra < ActiveRecord::Base
has_many :obras, :foreign_key =>“que_serie” do
def publicadas
find(:all, :conditions=> [“publicado=?”,“Y”])
end
end
end

Y luego lo podrias usar asi:

@series = SeriesObra.find(:all) # puedes poner la condición que
necesites

@obras_publicadas = @series.obras.publicadas

Espero te sirva.
Saludos.

El día 29/10/07, Miguel M. [email protected]
escribió:

Wow! , gracias Rubén por la ayuda
y disculpa la demora de la respuesta.

funciona de maravillas , que elegancia :slight_smile: