Ruby/Rails - 如何创建类并从Controller访问它

Chr*_*len 14 ruby ruby-on-rails class

我一直在尝试使用一些不同的宝石在rails 3中显示googlemaps并且遇到了一些问题.

幸运的是我找到了这个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
Run Code Online (Sandbox Code Playgroud)

然后运行

 <%= draw_map_of Location.new("My House", 12.345, 56.789) %>
Run Code Online (Sandbox Code Playgroud)

在视图中.

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

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

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

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

Dan*_*ail 24

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

lib/如果你愿意,你也可以把它放在下面.

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

require "#{Rails.root}/lib/location.rb"
Run Code Online (Sandbox Code Playgroud)

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

def show
  @location = Location.new("My House", 12.345, 56.789)
end
Run Code Online (Sandbox Code Playgroud)

然后在你看来:

<%= draw_map_of @location %>
Run Code Online (Sandbox Code Playgroud)

不要忘记 - 在Rails之下是纯Ruby的所有功能和灵活性,随时可以使用.你不仅限于Rails给你的东西.