2013-01-11 2 views
0

그룹과 연관되어있는 사용자 모델이 있습니다. 아래에 관계가 있습니다.모델에서 컨트롤러 메소드를 호출하는 방법

class User < ActiveRecord:;Base 
    has_many :groups 
end 
class Group < ActiveRecord::Base 
    belongs_to :user 
    scope :user_groups, lambda { where(arel_table(:user_id).eq(@current_user.id) } 
end 

class ApplicationController < ActionController::Base 
    def current_user 
    @current_user ||= User.find(session['entity.user']) if session['entity.user'] 
    end 
end 

그룹 인덱스 페이지의 select_tag에서 current_user 그룹을 필터링하고 싶습니다.

어떻게해야합니까?

답변

1

모델 내부에서이 데이터에 액세스하면 안됩니다.이 데이터는 MVC를 위반합니다.

scope :user_groups, 
      lambda { |user| where(arel_table(:user_id).eq(user.try(:id) || user) } 

그리고 다음과 같이 호출 :

User.user_groups(@current_user) # or you can pass @current_user.id, still works 

: 당신은 범위에 대한 인수로 전달하는 더 나은 것 당신은 ID (정수) 또는 사용자 중 하나를 전달할 수 있습니다 Object to user_groups λ.

+0

0의 인수가 잘못되었습니다. –

+0

'scope : user_groups'와'lambda [..]'사이의 줄을 끊지 마십시오. – MrYoshiji

0

경우에 따라 모델의 current_user를 확인해야 할 수도 있습니다. 따라서 현재 사용자 방법에서 다음과 같이 설정하십시오.

ActiveRecord::Base.current_user = @current_user 

이렇게하면 향후 정의 할 모델의 current_user를 확인할 수 있습니다.

관련 문제