Reputation: 4061
I have model user and I want create in model some method, call this method in helper, in controller Lists example and call this helper in view, but have error and don't know how to right write
my model User and my method
def include_current_user
User.where.not(id: current_user.id)
end
my controller Lists and helper
def shared_users
@users ||= User.include_current_user
end
helper_method :shared_users
and my views where call helper
<%= f.collection_check_boxes(:users, shared_users, :id, :email)%>
heave error
undefined method `include_current_user' for #<Class:0x007f389c649f98>
Did you mean? included_modules
when I moved my method to self part like this:
class << self
def include_current_user
where.not(id: current_user.id)
end
end
have error
undefined local variable or method `current_user' for #<Class:0x007f38ac5d98c8>
Did you mean? current_scope
current user this is helper in ssesion helper
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
maybe nned add variable for my method include_current_user
and get
in action call like this
def shared_users
@users ||= User.include_current_user(current_user)
end
and method in model
class << self
def include_current_user(user)
where.not(id: user.id)
end
end
when created some query in action everything fine, like this
def shared_users
@users ||= User.where.not(id: current_user.id)
end
helper_method :shared_users
But I want create method in model, mayde more complicated, how do right way ?
Upvotes: 0
Views: 2280
Reputation: 543
change method include_current_user
to class method
current_user not exist on model
Model:
def self.include_current_user current_user
User.where.not(id: current_user.id)
end
controller:
def shared_users
@users ||= User.include_current_user current_user
end
Upvotes: 2
Reputation: 23859
include_current_user
is not a class method. Hence you cannot call it without referring to an object of User
class. Try defining include_current_user
as self.include_current_user
. This will make it a class method. Then you will be able to call it as User.include_current_user
.
Upvotes: 0