我有两个表用户和顺序以及这两个表之间的关联如下。
在用户模型中
has_many :orders, dependent: :destroy
在订单模型中
belongs_to :user
我想从订单表中选择所有数据,但我想从用户表中选择该用户的名称,而不是user_id。
如何在导轨中执行操作?提前谢谢。
您只需执行以下操作:
orders = Order.where(your_conditions).includes(:user)
然后:
orders.each do |order|
order.user.name # implies that every order has a user
# or
order.user&.name # won't fail if order.user returns nil
end
这称为预先加载,您可以在此处找到文档:http://guides.rubyonrails.org/active_record_querying.html#eager-loading-associations
该语句Order.joins(:user).select('orders.*, users.name')
在同一记录中获取包含其所有列和用户名的订单,表名应在 select 指令中以复数形式传递。
您无需在控制器中进行任何特殊选择。
在控制器中:
@orders = Order.last(5) # gets 5 most recent orders
在您看来:
@orders.each do |order|
order.user.name # or order.user.first_name, e.t.c
end
只需从订单中访问用户即可。