有两个表格:user
和order
:
create_table "orders" do | t |
t.text "name"
t.integer "user_id"
end
create_table "users" do | t |
t.text "email"
end
两个班级:
class Order <ActiveRecord :: Base
belongs_to: users
end
class User <ActiveRecord :: Base
has_many: orders
end
Сontroller:
class TestController <ApplicationController
def index
@ tmp = Order.all(:include =>:users)
end
end
问题:我需要所有订单,但不是user_id
,而是返回与email
相关联的user_id
答案 0 :(得分:1)
欢迎使用Stack Overflow,我自己是Rails的新手,但试试这个:
@tmp = Order.all(
:select => 'orders.id, orders.etc, users.email',
:joins => "LEFT JOIN users on users.id = orders.user_id",
# :conditions => ['column_name = ?', @value_of_your_choice],
:order => 'orders.created_at ASC'
)
你也可以试试这个:
class TestController < ApplicationController
def index
@tmp = Order.all()
end
end
然后,在视图中:
<% @tmp.each do |order| %>
<!-- do not show if orders.user.id is NULL -->
<% if !order.user_id.nil? %>
<tr>
<td><%= order.id %></td>
<td><%= order.user.email %></td>
</tr>
<% end %>
<% end %>
由于定义了两个模型之间的关系,您可以通过这种方式访问相关人员的属性。
您可能需要将belongs_to: users
更改为belongs_to: user
中的user.rb
,但
答案 1 :(得分:1)
我没有评论的声誉,但关于order.user.email问题,请使用try方法:
order.user.try(:email)
如果用户为零,则只返回nil,而不是引发异常。