Я две следующие модели связаны:Active Record Получить belongs_to
class Post < ActiveRecord::Base
belongs_to :language
def self.are_visible
self.where(:visible => true)
end
end
class Language < ActiveRecord::Base
has_many :posts
end
schema.rb
create_table "languages", force: true do |t|
t.string "name_de"
t.string "name_en"
end
create_table "posts", force: true do |t|
t.string "title"
t.text "description"
t.integer "language_id"
end
add_index "posts", ["language_id"], name: "index_posts_on_language_id"
Как я могу перечислить все языки всех видимых магазинах без дублей?
Я хочу что-то вроде этого:
@languages = Post.are_visible.select(:language).uniq
Но это приводит к следующей ошибке
PG::UndefinedColumn: ERROR: column "language" does not exist
Конечно, этот столбец не существует, только столбец language_id
существует на столе.
Я задаюсь вопросом, почему это настолько сложно, потому что в C# Linq я бы просто написать:
Repository.Posts.Where(p => p.Visible).Select(p => p.Language).Distinct()
И я хотел бы получить все места соответствующих должностей. Но почему-то я думаю, что мне нужно изменить свой подход в корне, чтобы получить это в активной записи.
Update: Понял работает следующим образом:
@languages = Post.joins(:language).are_visible.uniq.pluck(:name_de)
Пожалуйста, измените текст вопроса, потому что это не очевидно. – MC2DX
@ MateuszCzerwiński Обновленный вопрос будет более конкретным. – Dennis
. Лучший подход - использование методов, а не методов класса. – MC2DX