我需要以下主题的帮助:
我正在尝试根据其ID创建一组用户
def show
@appointment = Appointment.where(:event_id => :id).all
@users = Array.new
@appointment.each do |appointment|
@users.fill(User.find(appointment.user_id))
end
end
首先,我得到所有约会,其中event_id与:id(来自Event表)相同。然后我继续创建一个数组,以便稍后用.each do表达式中的用户填充。
问题是在expresion结束后@users为空。
我做错了什么?
答案 0 :(得分:2)
更简单:
@users = User.find(Appointment.where(event_id: <id>).pluck(:id))
你的代码不能正常工作,因为你误解了fill
的方法 - 它用传递的对象替换数组的所有元素(非常类似,可能需要一些额外的参数来稍微改变它的行为)。你最谦虚地寻找push
或unshift
方法。
如果我是正确的,你的联想很可能是这样的:
Event has_many :appointments
Appointment belongs_to :user
在这种情况下,你可以简单地创建has_many:通过关联:
class Event < ActiveRecord::Base
has_many :appointments
has_many :users, through: :appointments
end
然后您的查询就是:
Event.find(<id>).users
答案 1 :(得分:0)
@users = Appointment.includes(:user).where(:event_id => <id>).map(&:user)
应该有效,假设您有User has_many :appointments
&amp; Appointments belongs_to :user
个关联设置。