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 в качестве переменных и отображать динамическую карту.
Ответы
Ответ 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.