2016-08-17 6 views
1

navbarを介して渡されたparams値とselectタグの名前に基づいて現在のユーザーの(マネージャー)データを表示したいとします。ユーザーには2つの役割( '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 

そして最後に私のselectタグ使用している -

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();") 

ユーザーモデル -

 class << self 
     def user_for_select(user) 
      self 
      .pluck("CASE WHEN id = #{user.id} THEN 'Me' ELSE name END AS name, id") 
      .unshift(['All', 'all']) 
     end 
     end 

答えて

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

なぜ選択リストに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

ユーザーのユーザーと管理者のための2つの役割があり、管理者は任意のユーザを選択するか、することができ、私は結果を得ましたwは、ナビゲーションバーでこの変更を行いましたすべてのユーザー、私はタイムシートでこれを使用していますので、デフォルトではすべてのユーザーのすべてのレコードがロードされるため、タイムシートをロードしてから、すべてのユーザーを1つだけ表示するかどうかを選択できます私はこのレコード生成に使用したクエリも追加しています。 –

+0

私は自分の答えを更新します。 –

関連する問題