2016-11-29 153 views
0

我有模型用戶,我想在模型中創建一些方法,在助手中調用此方法,在控制器列表示例,並調用此助手在視圖中,但有錯誤,不知道如何正確寫入Rails自定義模型方法

我的模型用戶和我的方法

def include_current_user 
    User.where.not(id: current_user.id) 
    end 

我的控制器列表和輔助

def shared_users 
    @users ||= User.include_current_user 
    end 

    helper_method :shared_users 

和我的意見,並在呼叫幫手

<%= f.collection_check_boxes(:users, shared_users, :id, :email)%> 

起伏錯誤

undefined method `include_current_user' for #<Class:0x007f389c649f98> 
Did you mean? included_modules 

,當我提出我的方法,自體部分 這樣的:

class << self 
    def include_current_user 
     where.not(id: current_user.id) 
    end 
    end 

有錯誤

undefined local variable or method `current_user' for #<Class:0x007f38ac5d98c8> 
Did you mean? current_scope 

當前用戶這是ssesion幫手幫手

def current_user 
    if (user_id = session[:user_id]) 
     @current_user ||= User.find_by(id: user_id) 
    elsif (user_id = cookies.signed[:user_id]) 
     user = User.find_by(id: user_id) 
     if user && user.authenticated?(cookies[:remember_token]) 
     log_in user 
     @current_user = user 
     end 
    end 
    end 

也許NNED行動調用添加變量我的方法include_current_user並獲得 這樣

def shared_users 
    @users ||= User.include_current_user(current_user) 
    end 
模型

class << self 
    def include_current_user(user) 
     where.not(id: user.id) 
    end 
    end 

和方法創造了行動的一切某些查詢時細,像此

def shared_users 
    @users ||= User.where.not(id: current_user.id) 
    end 

    helper_method :shared_users 

但我想在模型中創建方法,可能會更復雜,如何做正確的方法?

回答

2
  1. 改變方法include_current_user類方法

  2. CURRENT_USER上模型

模型不存在:

def self.include_current_user current_user 
    User.where.not(id: current_user.id) 
end 

CONTRO ller:

def shared_users 
    @users ||= User.include_current_user current_user 
end 
+0

我向方法和這項工作添加變量,但我有問題 - 這是正確的方式? –

+0

是的,current_user只存在於會話中。這意味着你只能在視圖或控制器上調用它 –

0

include_current_user不是類方法。因此,如果沒有提到User類的對象,就不能稱它。嘗試將include_current_user定義爲self.include_current_user。這將使它成爲一種類方法。然後你可以將其稱爲User.include_current_user

+0

這仍然不會解決他的問題,因爲當前用戶將不會在模型中可用。 @ shuba.ivan您需要將當前用戶傳入方法,並處理它爲零的可能性。 –

+0

@ j-dexx - 他明確表示「@users || = User.where.not(id:current_user.id)」工作正常。這意味着'current_user'可能已經在類級別上定義。 – 31piy

+0

他說現在的用戶是幫手。除非包含模型,否則模型將不可用。 –