Ruby on Rails: как объединить две таблицы - PullRequest
7 голосов
/ 19 апреля 2009

У меня есть индексная страница, на которой я хочу показать профиль всех пользователей и связанные с ними фотографии. Я использую плагин Paperclip для фотографий. В контроллере Profiles у меня есть переменная экземпляра @profile, но она показывает мне только таблицу в таблице профилей, а не таблицу photos.

@profile = Profile.find(:all, :include => :photos,
  :joins => "INNER JOIN photos ON photos.profile_id = profiles.id")

Модели показаны ниже:

class Profile < ActiveRecord::Base
  has_many :photos
end

class Photo < ActiveRecord::Base
  belongs_to :profile
end

То, что я хочу показать в представлении, выглядит примерно так:

  • Профиль Джона (например, имя, возраст, пол) - фотография Джона (например, показана только одна фотография)
  • Профиль Мэри здесь - здесь показана фотография Мэри
  • Профиль Боба здесь - изображение Боба, показанное здесь

1 Ответ

15 голосов
/ 19 апреля 2009

Я отредактировал свой ответ, чтобы отразить ваши дополнительные комментарии.

Прежде всего, вам не нужен параметр :joins; :include => :photos должен обработать соединение "за кулисами" для вас.

Вот один из способов сделать то, о чем вы спрашиваете.

(в моделях)

class Profile < ActiveRecord::Base
  has_many :photos
  has_one :primary_photo, :class_name => "Photo", :conditions => {:primary => true}
end

(в контроллере)

@profiles = Profile.find(:all, :include => :primary_photo)

(в представлении)

<% @profiles.each do |profile| %>
  Name: <%= profile.name %>
  Age: <%= profile.age %>
  Photo: <%= image_tag profile.primary_photo.url %>
<% end %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...