从数据库rails创建一个数组

时间:2015-06-24 23:20:39

标签: ruby-on-rails arrays ruby activerecord

我需要以下主题的帮助:

我正在尝试根据其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为空。

我做错了什么?

2 个答案:

答案 0 :(得分:2)

更简单:

@users = User.find(Appointment.where(event_id: <id>).pluck(:id))

你的代码不能正常工作,因为你误解了fill的方法 - 它用传递的对象替换数组的所有元素(非常类似,可能需要一些额外的参数来稍微改变它的行为)。你最谦虚地寻找pushunshift方法。

更好的解决方案

如果我是正确的,你的联想很可能是这样的:

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个关联设置。