Ruby on Rails 4:我必须放置公共代码吗?

时间:2016-10-22 07:04:34

标签: ruby-on-rails ruby ruby-on-rails-3

我是Ruby on rails的新手。我正在使用rails 4.1.6,我想要的是在一个文本文件(like index page accessed, view page access etc..).中记录所有进程,因为我想要创建常用功能,我可以将我的文本作为agrs传递,我做过一些R& D,我发现了这个:In Rails, where to put useful functions for both controllers and models,但它似乎无法使用活动的管理资源。所以,对于主动管理控制器和模型,我必须创建任何其他模块(即在其他位置,比如说/ admin /)或我必须做的任何事情?

我们可以在像cakephp中的组件这样的活动管理中使用任何全局位置。

感谢

修改

app/admin/driver.rb

ActiveAdmin.register User, as: 'Driver' do
    ...
    ...
    index :download_links => false do
        ...
        ...
        #call function to maintain log something like,
        take_note('action performed')
    end

2 个答案:

答案 0 :(得分:0)

最简单的方法是在config/initializers文件夹中创建一个文件 - 这些文件将自动加载。

您也可以在application.rb中编写它,但我建议仅对配置进行此操作。

一种常见模式是将lib/添加到自动加载路径,以便可以使用其中的任何自定义文件 - 请参阅Auto-loading lib files in Rails 4

可能值得一提的是,您实际上也可以从任何地方访问您的模型。

您的评论

这是一个通用类,如果将其添加到自动加载路径,可以在lib中编写

class MyClass
  def self.my_class_method
    puts "i was called"
  end
end

然后从其他任何地方调用它......

MyClass.my_class_method

答案 1 :(得分:0)

一种全局方法对我来说就像是一种代码味道。相反,我会创建一个Note类或模块。这不会污染全局名称空间,并且更容易单独测试。

我会在初始化程序中添加这样的代码:

# in config/initializers/note.rb
module Note
  def self.take(message)
    # log `message`
  end
end

它可以像你一样在你的控制器中使用:

index :download_links => false do
  # ...
  Note.take('action performed')
end

请注意,更改config文件夹中的文件时需要重新启动服务器。