Подтвердить что ты не робот

Ruby/Rails - Как создать класс и получить доступ к нему из контроллера

Я пытался использовать несколько разных камней для отображения googlemaps в rails 3 и имел несколько проблем.

К счастью, я нашел этот https://github.com/YouthTree/bhm-google-maps, который является помощником и, похоже, работает для других.

Я установил его правильно, но в readme 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) %>

в представлении.

Это кажется достаточно простым, но я не испытывал необходимости создавать класс раньше в рельсах, поэтому у меня есть некоторые вопросы.

Должен ли я создать файл location.rb и поместить в него вышеуказанный код, но где я должен поместить файл? (папка модели, папка приложения????)

Есть ли способ создать этот класс в моем контроллере?

В идеале я хотел бы манипулировать значениями lat/lng в качестве переменных и отображать динамическую карту.

4b9b3361

Ответ 1

Вы должны положить location.rb везде, где вы чувствуете, что это имеет наибольший смысл. Наличие в app/models/location.rb гарантирует, что это автоматически потребуется, когда ваше приложение запустится, но некоторые люди ожидают, что классы в app/models будут поддерживаться ActiveRecord.

Вы также можете поместить его под lib/, если хотите.

Чтобы сделать его доступным для приложения, вы можете включить require statement в инициализаторы проекта внутри вашей папки config:

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.