如何在Rails中使用可重用的控制器方法?

Rob*_*kin 3 ruby ruby-on-rails

我是Rails的新手,正在创建一个简单的用户身份验证系统,以掌握Rails的工作原理.

我目前正处于创建一些方法,我可以在我的控制器中使用,如下所示:

is_logged? # => true
Run Code Online (Sandbox Code Playgroud)

current_user_id # => 6
Run Code Online (Sandbox Code Playgroud)

这些将用于与会话交互,主要是因为我不会在控制器中重复自己.

我在哪里定义这些函数以及如何将它们包含在控制器中?

非常感谢您提供任何帮助.

Kum*_*mar 7

方法1

您可以在帮助文件里面定义这些方法app/helpers/my_module.rb.您可以在那里创建一个模块,将所有方法放在其中,然后在控件中包含模块以使用这些方法.

module MyMoule
  def is_logged?
    ...
  end
end
Run Code Online (Sandbox Code Playgroud)

然后在你的课程中包括模块

class MyClassController < ApplicationController
  include MyModule

  def my_method
    #Use it like this
    logged_in = MyModule.is_logged?
  end
end
Run Code Online (Sandbox Code Playgroud)

方法2

如果你使用会话相关的东西,你可以随时把它们放在里面application_controller.rb.并且由于您的所有控制器都将继承ApplicationController这些方法.

class ApplicationController < ActionController::Base
  def is_logged?
    ...
  end
end
Run Code Online (Sandbox Code Playgroud)

在您的其他控制器中,您可以直接使用它们.

class MyClassController < ApplicationController
  def my_method
    logged_in = is_logged?
  end
end
Run Code Online (Sandbox Code Playgroud)