Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

360
Visualizações
¿Cómo acceder a has_many a través de la relación posible en los rieles?

¿Cómo puedo acceder a mis registros relacionados?

 class Post < ActiveRecord::Base has_many :post_categories has_many :categories, through: :post_categories class Categories < ActiveRecord::Base has_many :post_categories has_many :post, through: :post_categories class PostCategories < ActiveRecord::Base belongs_to :post belongs_to :category

La tabla PostCategories tiene columnas id, posts_id y categorias_id.

 id | posts_id | categories_id 1. | 2 | 3 2. | 2 | 4

Lo que quiero es: obtener publicaciones relacionadas con una categoría. Me gusta: todas las Posts where x category .

over 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

Sí, esta es fácil.

 one_or_more_categories = # Category.find... or Category.where... posts = Post.joins(:categories).where(category: one_or_more_categories)

Rails es lo suficientemente inteligente como para tomar un modelo o una consulta que encontraría algunos datos y los convertiría en una consulta adecuada y eficiente, que podría ser una subconsulta. Probar cosas en la consola de Rails ( bundle exec rails c ) es una buena manera de ver el SQL generado y comprender mejor lo que sucede.

(EDITAR: como señala otra respuesta, si ya recuperó una instancia de categoría específica, puede hacer referencia a category.posts y trabajar con esa relación directamente, incluido el encadenamiento en .order , .limit , etc.).

Otra forma de escribirlo 'nivel inferior' sería:

 Post.joins(:categories).where(category: {id: one_or_more_category_ids})

...que es, en esencia, lo que Rails hará bajo el capó cuando se le proporcione una instancia de modelo ActiveRecord o una relación ActiveRecord::. Si ya conocía, por ejemplo, la categoría "nombre", o alguna otra columna de texto indexada en la que podría buscar, entonces ajustaría lo anterior en consecuencia:

 Post.joins(:categories).where(category: {name: name_of_category})

El patrón de joins y where tomar un Hash donde el nombre de la tabla de unión se usa como una clave con valores anidados debajo puede tomarse tan profundo como desee (por ejemplo, si las categorías tenían muchas subcategorías) y puede encontrar más sobre eso en Rails Guías o búsquedas web adecuadas. El único problema es el tortuoso singular/plural, que Rails usa para tratar de hacer las cosas más "inglesas", pero a veces, como en este caso, solo crea una carga cognitiva adicional de tener que recordar qué partes deben ser singulares y cuáles. plural.

over 4 years ago · Santiago Trujillo Relatório

0

No estoy seguro si esto responde, pero en ActiveRecord su Post tendrá acceso directo a su modelo de Category y viceversa. Por lo tanto, puede identificar la categoría de la que desea las publicaciones en una variable o una variable de instancia y consultar @specific_category.posts . Si está haciendo esto en su controlador, incluso podría hacerlo en el filtro before_action . Si lo está utilizando en serializadores, no es muy diferente.

También puede crear un alcance en su modelo Post y usar un registro activo o SQL sin procesar para consultar parámetros específicos.

También tiene un error en su modelo de Category . Has many siempre es plural por lo que sería has_many :posts, through: :post_categories

over 4 years ago · Santiago Trujillo Relatório

0

Obtenga el objeto de categoría y puede obtener directamente las publicaciones relacionadas. Por favor vea lo siguiente

 category = Category.find(id) posts = category.posts

Dado que ya configuró la relación has_many_through, Rails obtendrá registros de publicaciones relacionados con la categoría.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda