Rails 5 Scheduling App查找用户的所有班次

时间:2018-10-13 14:34:21

标签: ruby ruby-on-rails-5

我们正在尝试创建一个端点,使用户可以查看所有日历上的所有个人班次。目前,我在shifts控制器中具有以下语法:

def myschedule
    @user = current_user
    if @user
        @shifts = Shift.where("end_time > ?", Time.current).order("start_time ASC").limit(100)
        render "/shifts/index2.json", status: :ok
    else
        render json: ('You do not have access to these shifts'), status: :unauthorized
    end
end

按预期,这将返回所有日历的前100个班次,但对于所有用户。寻找一种方法来将移位限制为仅针对指定用户的移位的最佳方向是什么?我希望在正确的方向上提供一些指导。呈现的json是哈希数组。

就关系在模型级别而言:

通过usershifts转移了has_many个用户 用户通过用户转移has_many转移 用户和班次都有has_many个用户班次 和usershift属于user和shift。

我尝试过:

def myschedule
    @user = current_user
    if @user
        @shifts = Shift.where("end_time > ?", Time.current).order("start_time ASC").limit(100).include?(@user)
        render "/shifts/index2.json", status: :ok
    else
        render json: ('You do not have access to these shifts'), status: :unauthorized
    end
end

在我的json视图中,哪个返回的方法映射为false:Falseclass。

这也是json视图:

json.shifts @shifts do |shift|
json.shift_id shift.id
json.start_time shift.start_time
json.end_time shift.end_time
json.calendar_name shift.calendar.name
end

我还尝试将.joins(@user)扔到@shifts的末尾,这为json返回了一个未知的类User。

我也尝试过:

def myschedule
    if current_user
        @shifts = Shift.where("end_time > ?", Time.current).order("start_time ASC").limit(100).where(:user_id => params[:user_id])
        render "/shifts/index2.json", status: :ok
    else
        render json: ('You do not have access to these shifts'), status: :unauthorized
    end
end

在服务器日志中出现以下错误

ActionView::Template::Error (PG::UndefinedColumn: ERROR:  column 
shifts.user_id does not exist
LINE 1: ...ERE (end_time > '2018-10-13 14:52:02.693352') AND "shifts"."

1 个答案:

答案 0 :(得分:0)

  

寻找一种方法来限制限制的最佳方向是什么   转移到仅针对指定用户的

这应该有效

@shifts = @user.shifts.where("end_time > ?", Time.current).order("start_time ASC").limit(100)