Ruby on Rails: How to join two tables
28,945
I've edited my answer to reflect your extra comments.
First of all, you shouldn't need the :joins
parameter; :include => :photos
should handle the join "behind the scenes" for you.
Here's one way to do what you're asking about.
(in the models)
class Profile < ActiveRecord::Base
has_many :photos
has_one :primary_photo, :class_name => "Photo", :conditions => {:primary => true}
end
(in the controller)
@profiles = Profile.find(:all, :include => :primary_photo)
(in the view)
<% @profiles.each do |profile| %>
Name: <%= profile.name %>
Age: <%= profile.age %>
Photo: <%= image_tag profile.primary_photo.url %>
<% end %>
Author by
Max
Updated on September 25, 2020Comments
-
Max over 3 years
I have an index page that I want to show all the users' profile and their associated photos. I'm using the plugin Paperclip for the photos. In the Profiles controller, I have the instance variable @profile but it shows me the table in the profiles table only and not the photos table.
@profile = Profile.find(:all, :include => :photos, :joins => "INNER JOIN photos ON photos.profile_id = profiles.id")
The models are shown below:
class Profile < ActiveRecord::Base has_many :photos end class Photo < ActiveRecord::Base belongs_to :profile end
What I want to be able to show in the View is something like:
- John's profile (e.g., name, age, sex) - John's picture (e.g., only one picture shown)
- Mary's profile here - Mary's picture shown here
- Bob's profile here - Bob's picture shown here
-
Max about 15 yearsI have a boolean column called primary in the Photos table. Is there a way to display the photo only if the primary column is set to 1? Adding the line <%= if photo.primary = 1 %> after the profile.photos.each tag doesn't seem to work.
-
Max about 15 yearsOk, it's working now. I should be using tinyint instead of int for the primary column in the database.