Вложенные: has_many,: через атрибуты - PullRequest
3 голосов
/ 20 февраля 2012

Я использую has_many: through, чтобы создать ассоциацию между двумя моделями с использованием сквозного соединения с именем list_items :

user.rb:

  has_many :list_items
  has_many :wishes, :through => :list_items

wishe.rb:

  has_many :list_items
  has_many :users, :through => :list_items

list_item.rb:

  belongs_to :user
  belongs_to :wish

Это прекрасно работает, однако у list_items есть дополнительные атрибуты для модели wishes , к которым я хотел бы получить доступ на основе критериев из users (точнее, current_user ). В настоящее время я могу получить доступ к этому атрибуту, используя такой код:

wishes_controller.rb:

  @wishes = current_user.wishes

index.html.haml:

 -wish.list_items.each do |list_item|
    -if list_item.user_id == current_user.id
        =list_item.list_position

Это прекрасно работает, однако, держу пари, что есть более элегантный способ сделать это, имея возможность доступа к нему, например, wishes.list_position (который вытянет соответствующую list_position на основе идентификатора current_user). Я посмотрел здесь и здесь (и ряд дополнительных мест), но я не смог перевести эти концепции в мой проект.

1 Ответ

3 голосов
/ 20 февраля 2012

Оформить Нужны данные из таблицы соединений рельсов, has_many: через

Попробуйте это.
user.rb:

has_many :wishes, :through => :list_items, :select => 'wishes.*, list_items.list_position as list_position'

Это дает вам:

- @wishes.each do |wish|
  = wish.list_position
...