Rails 5 Scheduling App Найти все смены для пользователя - PullRequest
0 голосов
/ 13 октября 2018

Мы пытаемся создать конечную точку, которая позволяет пользователю просматривать все свои личные смены во всех календарях.В настоящее время у меня есть следующий синтаксис в контроллере смен:

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 представляет собой массив хэшей.

Насколько отношения идут на уровне модели:

сдвиг пользователей has_many, с помощью пользовательских смещений пользователь has_many смещает, с помощью пользовательских смещений и пользователь, и смещение has_manyusershift и 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

, который вернул неопределенную карту методов для false: Falseclass в моем представлении json.

Вотjson view:

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, который возвратил неизвестный класс User для json.

ТакжеЯ попытался:

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 голосов
/ 13 октября 2018

В каком направлении лучше всего искать способ ограничить смены только для указанного пользователя

Это должно работать

@shifts = @user.shifts.where("end_time > ?", Time.current).order("start_time ASC").limit(100)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...