在Rails中,在哪里为控制器和模型提供有用的功能

时间:2014-02-20 01:13:31

标签: ruby-on-rails

假设我有一个函数trim_string(string),我想在模型和控制器中的整个Rails应用程序中使用它。如果我把它放在应用程序助手中,它会进入控制器。但通常不需要在模型中使用应用程序帮助程序。那么你在哪里放置了你想要在模型和控制器中使用的通用代码?

2 个答案:

答案 0 :(得分:5)

回答具体问题“你在哪里放置了你想在模型和控制器中使用的通用代码?”:

将它放在lib文件夹中。将加载lib文件夹中的文件,其中的模块将可用。

更详细地说,使用问题中的具体示例:

# lib/my_utilities.rb

module MyUtilities
  def trim_string(string)
    do_something
  end    
end

然后在你想要的控制器或模型中:

# models/foo.rb

require 'my_utilities'

class Foo < ActiveRecord::Base
  include MyUtilities

  def foo(a_string)
    trim_string(a_string)
    do_more_stuff
  end
end

# controllers/foos_controller.rb

require 'my_utilities'

class FoosController < ApplicationController

  include MyUtilities

  def show
    @foo = Foo.find(params[:id])
    @foo_name = trim_string(@foo.name)
  end
end

答案 1 :(得分:1)

看起来你想让String类上的方法比trim_string函数更好地“修剪”它,对吧?你不能使用strip方法吗? http://www.ruby-doc.org/core-2.1.0/String.html#method-i-strip

您可以在初始值设定项的字符串类中添加新方法,请检查此In Rails, how to add a new method to String class?

class String
  def trim
    do_something_and_return_that
  end

  def trim!
    do_something_on_itself
  end
end

你可以这样做:

s = '  with spaces '
another_s = s.trim #trim and save to another
s.trim! #trim itself

但是检查String类,看起来你已经拥有了你需要的东西