Rails自定义模型方法

时间:2016-11-29 09:51:04

标签: ruby-on-rails activerecord

我有模型用户,我想在模型中创建一些方法,在helper中调用此方法,在控制器列表示例中并在视图中调用此帮助程序,但是有错误并且不知道如何正确写入

我的模型用户和我的方法

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

可能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

但我想在模型中创建方法,mayde更复杂,怎么做正确的方法?

2 个答案:

答案 0 :(得分:2)

  1. 将方法!foldernum!更改为类方法

  2. current_user模型上不存在

  3. 型号:

    @Echo off
    
    If "%1"=="" (
        Echo Usage: %0 '^<base folder^>'
        Exit /b
    )
    SetLocal EnableDelayedExpansion
    
    Rem Get number of files in the folder
    For /f %%A in ('dir %1 ^| find "File(s)"') do set totalfiles=%%A
    
    Rem Set your parameters here
    Rem First part of your folder name
    Set folderprefix=m_
    Rem m_1 ... m_8 => 8 folders
    Set totalfolder=8
    
    Set /a files_per_folder=totalfiles/totalfolder
    
    Set filenum=1
    Set foldernum=1
    For %%f in (%1\*) do (
        Move "%%f" "%folderprefix%!foldernum!\"
    
        Rem Move to next folder by increasing folder number "
        If !filenum! EQU %files_per_folder% (
            If !foldernum! LSS %totalfolder% (
                Set /a foldernum+=1
                Set filenum=0
            )
        )
        Set /a filenum+=1
    )
    

    控制器:

    include_current_user

答案 1 :(得分:0)

include_current_user不是类方法。因此,如果不引用User类的对象,则无法调用它。尝试将include_current_user定义为self.include_current_user。这将使它成为一种类方法。然后,您就可以将其称为User.include_current_user