Reputation: 7
Table sample:
users :id, name, email, created_at, update_at
messages : id, user_id, msg, froms, status, created_at, update_at
In php :
$query = "SELECT messages.id, users.name, users.email, messages.msg, messages.from FROM messages,users WHERE users.id = messages.user_id";
$result = $mysqli->query($query);
while($row =$result->fetch_array())
{
echo $row[0];
echo $row[1];
echo $row[2];
echo $row[3];
echo $row[5];
}
In rails :
class Message < ActiveRecord::Base
belongs_to :user
end
class Page < ActiveRecord::Base
belongs_to :subject
end
how i use in activerecord ??
@user = User.select("messages.id, users.name, users.email, messages.msg, messages.froms").joins(:messages)
<% @user.each do |user| %>
<%= ???? => ## i don't know for get field
<% end %>
Upvotes: 0
Views: 469
Reputation: 772
You are selecting messages with user info so you should start by message
@messages = Message.includes(:user)
model
class Message < ActiveRecord::Base
belongs_to :user
delegate :name, :email, to: :user, prefix: true, allow_nil: true
end
view
<% @messages.each do |msg| %>
<%= msg.id %>
<%= msg.user_name %> #or msg.user.name if ignore delegate in model
<%= msg.user_email %> #or msg.user.email if ignore delegate in model
<%= msg.msg %>
<%= msg.from %>
<% end %>
Upvotes: 0
Reputation: 176362
Your query starts from the User
model, therefore you will get back a list of User
instances. That means that you can easily access user attributes by using
@users = User.select("messages.id, users.name, users.email, messages.msg, messages.froms").joins(:messages)
<% @users.each do |user| %>
<%= user.name %>
<% end %>
However, if you want to access messages information, that's a little bit more complicated. In fact, as User can have more messages (I suppose), then the best way to fetch them is to run a second query or use includes(:messages)
rather than joins(:messages)
.
@users = User.select("name, email")
<% @users.each do |user| %>
<%= user.name %>
<% user.messages.each do |message| %>
<%= message.msg %>
<% end %>
<% end %>
Upvotes: 1