2011-01-07 1 views
1

Я использую ActiveResource в своем приложении rails, чтобы поговорить с другим приложением rails (обе версии 2.3.5). Я хотел бы ссылаться на страницу для определенного объекта ресурса, но, похоже, нет никакого хорошего способа сделать это. Отвратительный путь я понял, это добавить строку в мой routes.rb файл, который имитирует мой ресурс, как это:Есть ли хороший способ использовать url_for с ActiveResource?

# environment.rb, or in the config/environments/*.rb files 
PERSON_URL = "people.example.com" 

# person.rb 
class Person < ActiveResource::Base 
    self.site = "http://#{PERSON_URL}" 
end 

# routes.rb 
map.resources :people # or persons, or whatever 

# my_view.html.erb 
<%= link_to person.name, person_url(person, :host => PERSON_URL) %> 

Но это довольно некрасиво. Теперь у меня есть дополнительный маршрут, плавающий в моем приложении, который на самом деле не существует. Там должен быть лучший путь. Есть ли у самой модели какие-либо подсказки для получения URL-адреса для себя? У кого-нибудь есть подсказки? Благодарю.

+0

Я бы создал приложение-помощник, чтобы иметь более чистый код, только улучшение Я вижу – apneadiving

ответ

0

ActiveResource не предназначен для использования таким образом. Он реализован очень близко к ActiveRecord. Маршруты на локальное определение. Если вы ссылаетесь на другой сайт, вы больше не связываетесь с этим приложением, поэтому обычные маршруты вам не помогут (много).

По умолчанию помощники работают только с соглашениями об именах. Единственное, что помощники URL-адреса будут делать с объектами, - это вызов to_param, чтобы получить идентификатор для отдельных ресурсов.

Я не знаю, есть ли драгоценный камень, который может вам помочь, но я боюсь, что вы должны сделать своих помощников.

+0

Я был бы склонен согласиться с вами по назначению для ActiveResource, если бы не этот один бит документации для url_for : «Если вместо хэша вы передаете запись (например, активную запись или активный ресурс) в качестве параметра параметров, вы вызываете именованный маршрут для этой записи. Поиск будет происходить от имени класса. Объект мастерской попытается использовать маршрут workshop_path ... «Если они явно разрешают объект ActiveResource, я думаю, что это должно было бы сделать их полезными? – carpeliam

+0

ActiveResource, как и ActiveRecord (и поскольку Rails 3 каждый класс, расширяющий ActiveModel :: Naming), генерирует ссылку на основе их имени так же, как в документации: «Поиск будет происходить от имени класса». Вы всегда ссылаетесь на свое собственное представление объекта, а не на оригинальное представление. В ActiveRecord вы ссылаетесь на свою модель, а не на базу данных, которая стоит за ней. То же самое касается ActiveResource. Кроме того, он даже не уверен, что источник вашего класса ActiveResource имеет представление HTML, это может быть только XML или JSON. – iain

+0

Теперь, когда я думаю об этом, возможно, есть способ обойти его, и это через 'default_url_options'. Это метод, который вы можете определить в своем прикладном_контроллере. Я не знаю, будет ли это работать, но, возможно, стоит посмотреть на него. – iain