Association tables problem

Cześć,
mam problem z korzystaniem z tabel połączonych, a mianowicie z wyświetlaniem języków dla danego projektu. Chciałbym ostatecznie móc sortować wg. języków.

class Language < ActiveRecord::Base
  has_and_belongs_to_many :projects
end


class Project < ActiveRecord::Base
  belongs_to :developer
  
  has_and_belongs_to_many :languages

end

korzystając z migracji:

rails g migration CreateLanguagesProjects project:references language:references

utworzyłem tabelę języków.

W widoku korzystam z:

.project
  Name:
  = project.name
  %br/
  Description:
  = project.description
  %br/
  Language:
  = project.languages.each{|lang| puts(lang.name)}
  %br/
  Author:
  = project.developer.full_name
  %br/
  Votes:
  %br/
  %br/

co wyświetla tabelę w takiej formie:

 [#<Language id: 4, name: "English", created_at: "2015-12-13 16:10:18", updated_at: "2015-12-13 16:10:18">] 

Jak mogę “ładnie” to wyświetlić oraz zmniejszyć złożoność (żeby nie wykonywało zapytania dla każdego elementu, tylko jeden raz?

To raczej działa inaczej niz byś chciał :slight_smile: puts nic nie wyświetla, tylko each na koniec wypluwa wszystkie rekordy po których iterował.

muzisz zrobić np:

- project.languages.each do |lang| 
  = lang.name

HABTM jest fee, zrób sobie do tego tabelę łączącą.

Potrzebujesz includes w swoim kodzie.
@projects.includes(:languages)
http://apidock.com/rails/ActiveRecord/QueryMethods/includes

nic nie potrzebuje, nie ma n+1 query, zostaw go

Rozumiem, że jeśli będzie chciał sortować wg. języków, to będzie potrzebował tego.