Rieles ÚNASE A TABLAS
-
11-07-2019 - |
Pregunta
Tengo una siguiente CONSULTA SQL:
SELECCIONAR artículos.nombre, artículos.precio, usuarios.zipcode DESDE artículos INTERIORES ÚNASE a usuarios EN users.id = articles.user_id DONDE vectors @@ to_tsquery ('crime') ORDENAR por articles.price ASC
Y me gustaría escribirlo dentro de un método de búsqueda de una clase de ActiveRecord llamada Artículos (Artículos pertenece al usuario). Básicamente, quiero buscar artículos y acceder a la propiedad del código postal del usuario (usuario has_many artículos)
Escribí la siguiente versión, pero no estoy seguro de que funcione porque en la respuesta no recibo ninguna información sobre el código postal del usuario.
a = Article.find (: all,: condition = > " vectors @@ to_tsquery ('crime') ",: join = >: user,: order = >: price,: include = >: usuario)
Pero no tengo idea de cómo acceder a la información del código postal. ¿Cómo puedo acceder a esta información? este es el enfoque correcto?
Saludos,
Victor
Solución
Si ha acoplado Artículos
y Usuarios
como dice anteriormente, esto debería ser bastante fácil:
@articles = Article.find(:all, :conditions => "…", :include => :user)
Luego, en su opinión, puede hacer:
<ul>
<% for each article in @articles do %>
<li><%= article.user.zipcode %></li>
</ul>
<% end %>
Esto funciona porque Rails crea una propiedad para el objeto principal ( Usuario
) en el modelo ( Artículo
). Puede leer más sobre eso en los documentos de la API . Esto incluso funciona sin el " include " clave anterior, pero dejarlo fuera significaría una consulta a la base de datos en cada paso del ciclo.