2016-08-17 3 views
1

navbar를 통해 전달 된 params 값과 select 태그의 이름을 기반으로 현재 사용자의 (관리자) 데이터를 표시하고 싶습니다. 사용자는 두 개의 역할 ('user', 'manager') 또는 열거 형 역할 (0, 1). 이것은 내가 네비게이션 바에서 제공 한 링크입니다 -현재 사용자의 데이터와 그 이름을 선택 태그에 표시합니다.

%li= link_to 'Timesheet', is_manager? ? timesheet_path(user_id: current_user.id) : timesheet_path, class: navlink_class('timesheets') 

하지만 사용한 쿼리가이만큼 컨트롤러에 복잡지고 -

@begin_date = params[:begin_date].present? ? Date.parse(params[:begin_date]) : Date.today.beginning_of_month 
    @end_date = params[:end_date].present? ? Date.parse(params[:end_date]) : Date.today.end_of_month 
    begin_datetime = @begin_date.beginning_of_day 
    end_datetime = @end_date.end_of_day 
    @user_tasks = Task.joins(:task_time_trackers).where("(task_time_trackers.created_at BETWEEN ? AND ?)",begin_datetime, end_datetime).distinct.order("id ASC") 
    user_trackers = TaskTimeTracker.joins(:task).where("(task_time_trackers.created_at BETWEEN ? AND ?)",begin_datetime, end_datetime) 
    u_id = nil 
    u_id = params[:u_id] if (params[:u_id] && params[:u_id] != 'all') 
    u_id = current_user.id if current_user.role == 'user' 
    unless u_id.nil? 
     @user_tasks = @user_tasks.where(task_time_trackers: { user_id: u_id}) 
     user_trackers = user_trackers.where(task_time_trackers: { user_id: u_id}) 
    end 

마지막 선택 태그있는 I 사용한 -

select_tag(:u_id, options_for_select(User.user_for_select(current_user), selected: params[:u_id]), class: "input-sm form-control", onchange: "this.form.submit();") 

사용자 모델 -

,321 0

답변

0

이것은 ho입니다.

- if is_manager? 
    %li= link_to 'Timesheet', timesheet_path(u_id: current_user.id) 
- else 
    %li= link_to 'Timesheet', timesheet_path 

및 select 태그의 변화 - -

select_tag(:u_id, options_for_select(User.user_for_select(current_user), params[:u_id]), class: "input-sm form-control", onchange: "this.form.submit();") 
0

왜 select 목록에 current_user를로드해야하는지 모르겠습니다. 하지만 당신은 다음과 같은 사용자 모델의 선택을 사용자 정의 할 수 있습니다

def user_for_select(user) 
    self 
    .where(id: user.id) 
    .pluck("CASE WHEN id = #{user.id} THEN 'Me' ELSE name END AS name, id") 
    end 
end 

편집 주석에 따라 다릅니다

사용자 모델에 다음 메서드를 추가합니다

def is_manager? 
    self.role == "manager" 
end 

그 다음으로 선택을 업데이트 다음 :

def user_for_select(user) 
    if user.is_manager? 
     self 
     .pluck("CASE WHEN id = #{user.id} THEN 'Me' ELSE name END AS name, id") 
     .unshift(['All', 'all']) 
    else 
     self 
     .where(id: user.id) 
     .pluck("CASE WHEN id = #{user.id} THEN 'Me' ELSE name END AS name, id") 
    end 
end 
+0

사용자의 사용자 및 관리자에 대한 두 가지 역할이있다, 관리자가 사용자를 선택하거나 할 수 있습니다 나는 결과를 얻었다 승, 네비게이션 바이 변경 한 모든 사용자, 나는 이것을 작업 표에서 사용하고 있습니다. 그래서 기본적으로 모든 사용자에 대한 모든 레코드를로드합니다. 그래서 먼저 작업 표를로드하고 나서 모든 사용자를 모두 한 번 볼 수 있는지 선택할 수 있습니다 ,이 레코드 생성에 사용한 쿼리도 추가하고 있습니다. –

+0

내 대답을 업데이트하고 도움이 필요하면 받아들입니다. :) –

관련 문제