shuba.ivan
shuba.ivan

Reputation: 4061

Rails custom model method

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

Answers (2)

Duyet Nguyen
Duyet Nguyen

Reputation: 543

  1. change method include_current_user to class method

  2. 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

31piy
31piy

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

Related Questions