【问题标题】:Ruby/Rails - How to Create a Class and Access it from the ControllerRuby/Rails - 如何创建一个类并从控制器访问它
【发布时间】:2011-03-02 22:33:50
【问题描述】:

我一直在尝试使用一些不同的 gem 在 rails 3 中显示 googlemap,但遇到了一些问题。

幸运的是我找到了这个https://github.com/YouthTree/bhm-google-maps,它是一个助手,它似乎对其他人有用。

我已经正确安装了它,但是在自述文件https://github.com/YouthTree/bhm-google-maps/blob/master/README.md 中提到了为要在视图中显示的对象创建一个类。

他们给出的例子是

class Location
   attr_accessor :address, :lat, :lng
   def initialize(address, lat, lng)
      @address = address
      @lat = lat
      @lng = lng
   end
  def to_s; address.to_s; end
end

然后运行

 <%= draw_map_of Location.new("My House", 12.345, 56.789) %>

在视图中。

看起来很简单,但我之前没有经历过在 Rails 中创建类的需要,所以我有一些问题。

我应该创建一个 location.rb 文件并将上面的代码放入其中,但是我应该将文件放在哪里? (模型文件夹,应用程序文件夹??????)

有没有办法让我在我的控制器中创建这个类?

理想情况下,我想将 lat/lng 值作为变量进行操作并显示动态地图。

【问题讨论】:

    标签: ruby-on-rails ruby class


    【解决方案1】:

    你应该把location.rb放在你认为最有意义的地方。将它放在 app/models/location.rb 将确保在您的应用启动时自动需要它,但有些人希望 app/models 中的类由 ActiveRecord 支持。

    如果您愿意,也可以将其放在lib/ 下。

    要使其可用于应用程序,您可以在配置文件夹内的项目初始化程序中包含 require 语句:

    require "#{Rails.root}/lib/location.rb"
    

    至于在控制器中创建它 - 绝对!这只是一个类的另一个实例:

    def show
      @location = Location.new("My House", 12.345, 56.789)
    end
    

    然后在你看来:

    <%= draw_map_of @location %>
    

    不要忘记——在 Rails 之下是纯 Ruby 的所有功能和灵活性,可以随时使用。您不仅限于 Rails 为您提供的功能。

    【讨论】:

    • 如果您有文件 lib/location.rb 存在,您可以只使用 require 'location'
    • 替代语法:Rails.root.join('lib', 'location').to_s
    猜你喜欢
    • 2016-05-30
    • 1970-01-01
    • 1970-01-01
    • 2011-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多