Unbind de modelos en ror

hola queria saber si alguien ha probado algun aforma de hacer unbinding
de
modelos para que cuando se generen los selects de activerecord nosotros
podamos pedir los campos especificos o que tablas queremos seleccionar?

gracias

El Viernes, 22 de Febrero de 2008, Miguel M. escribió:

hola queria saber si alguien ha probado algun aforma de hacer unbinding de
modelos para que cuando se generen los selects de activerecord nosotros
podamos pedir los campos especificos o que tablas queremos seleccionar?

Para limitar el número de campos solicitados puedes usar el
parámetro “select”:

Modelo.find(:all, :select => ‘campo1, campo2, campo3’)

Lo de las seleccionar las tablas me temo que… como que no. Aunque
empiezo a
sospechar que te refieres a alterar un modelo en tiempo de ejecución,
¿es
así?

No te olvides de incluir en el select en el identificador porque sino
no podras guardar el objeto si lo modificas.

Model.find(:all, :select => ‘id, campo1 …’)

Un saludo,

Francesc

On Feb 22, 2008, at 12:09 AM, Iñaki Baz C. wrote:

Modelo.find(:all, :select => ‘campo1, campo2, campo3’)


Ror-es mailing list
[email protected]
http://lists.simplelogica.net/mailman/listinfo/ror-es


Not sent from my iPhone

Hola , gracias por las respuestas, en cuanto a la pregunta de Iñaki, por
ejemplo si tengo un modelo relacion muchos a muchos , pero me gustaria
en un
determinado find , solo selecionar un modelo nada mas , no los tres,
como
para que el active record solo haga un “SELECT … FROM unModelo” en
lugar
de hacer los todos los joins que se hacen en HABTM, supongo que eso se
soluciona con el select=> no?

es decir si a un modelo relacionado con otros le hago un
Model.find(:all,
:select => ‘id, campo1 …’), el query realmente sería un select a ese
modelo o haría las relaciones, where , join o lo que sea tambien?

gracias por la ayuda

2008/2/22 Francesc E. [email protected]:

Podrias definir explicitamente la tabla que quieres usar en tu modelo…

O utilizar :joins en el .find.

O usar directamente find_by_sql.

saludos!

El vie, 22-02-2008 a las 08:53 +0100, Francesc E. escribió:

Gracias

:smiley:

2008/2/22 Phillip N. [email protected]:

Hola,

Hola , gracias por las respuestas, en cuanto a la pregunta de Iñaki,
por ejemplo si tengo un modelo relacion muchos a muchos , pero me
gustaria en un determinado find , solo selecionar un modelo nada mas ,
no los tres, como para que el active record solo haga un “SELECT …
FROM unModelo” en lugar de hacer los todos los joins que se hacen en
HABTM, supongo que eso se soluciona con el select=> no?

justo lo que pides es lo que hace rails por defecto. Si tú le haces un
find sobre un modelo sólo te hace el FROM de ese modelo. Si quisieras
que incluyese a los otros modelos, tendrías que usar la opción :include.

De todos modos, puedes verlo muy claro monitorizando el log. Si haces
una query en el development.log verás justo el sql que tira. Jugando un
poco desde la consola y observando el log puedes entender cómo funciona AR

Ya que estamos, te pego un trozo de código muy útil para estas cosas.
Vale para hacer que desde la consola las trazas de AR te las pinte
directamente sobre la salida misma de la consola, sin tener que ir al
log a consultarlas.


ActiveRecord::Base.logger = Logger.new(STDERR)
ActiveRecord::Base.clear_active_connections!

Ahora ya puedes ejecutar en tu consola Modelo.find(loquesea) y ver
directamente el sql que se lanza

saludos,

javier ramírez

Hola,

Hola Javier gracias por tu ayuda, en realidad si sabía que AR te
ejecuta consultas SQL desde los find que uno genera en Rails, mi
pregunta era mas bien como poder desasociar los modelos en
determinadas consultas para que al hacer un find a un modelo solo me
haga un select a ese modelo y no los where o los joins si es que este
modelo esta asociado a otros.
la cosa está en que no tienes que hacer NADA.

Si tú tienes un modelo tal que

class Modelo < ActiveRecord::Base
has_many :otras_cosas
end

y haces

Modelo.find(:all)

verás que la query solamente se lanza contra la tabla modelos. Rails en
este momento no hace absoultamente nada con las asociaciones definidas.
A no ser que hagas

Modelo.find(:all,:include=>:otras_cosas)

En cuyo caso SÍ se va a hacer la join con la otra tabla.

Por eso te decía que no tienes que hacer nada para que se lance la query
que tú quieres. No hay que desasociar nada ya que Rails no va a intentar
navegar por las asociaciones a no ser que o bien implícitamente le pidas
un include, o bien una vez lanzada la select quieras acceder a un campo
de la otra tabla, en cuyo caso lanzará una nueva select contra la tabla
asociada.

saludos,

javier ramírez

genial entonces, me estaba ahogando en un vaso de agua :U

Saludos

2008/2/22 javier ramirez [email protected]:

Hola Javier gracias por tu ayuda, en realidad si sabía que AR te
ejecuta
consultas SQL desde los find que uno genera en Rails, mi pregunta era
mas
bien como poder desasociar los modelos en determinadas consultas para
que al
hacer un find a un modelo solo me haga un select a ese modelo y no los
where
o los joins si es que este modelo esta asociado a otros.

probaré las lineas de codigo que muestras , gracias !

2008/2/22 javier ramirez [email protected]: