2011-01-07 45 views
1

我在我的Rails應用程序中使用ActiveResource與另一個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) %> 

但是,這是很醜陋。現在我的應用程序中有一條額外的路線,實際上並不存在。一定有更好的方法。模型本身是否有獲取網址的線索?任何人有任何提示?謝謝。

+0

我會創建一個應用程序助手,以獲得更清晰的代碼,只有改進我看到 – apneadiving

回答

0

ActiveResource並不打算以這種方式使用。它被實現爲非常接近ActiveRecord。每個定義的路由都是本地的。如果你正在引用另一個網站,你不再鏈接到這個應用程序,因此正常路線不會幫助你(很多)。

默認助手僅處理命名約定。 url幫助者用對象處理的唯一事情是調用to_param來獲取單個資源的標識符。

我不知道是否有寶石可以幫助你,但我擔心你必須自己做助手。

+0

我傾向於同意你對ActiveResource的預期用途,如果它不是針對url_for的這一點文檔:「如果你不是通過散列傳遞記錄(比如Active Record或者Active Resource)作爲options參數,那麼你將觸發該記錄的命名路由,查找將發生在類的名字上。 Workshop對象將嘗試使用workshop_path路由...「如果他們明確允許一個ActiveResource對象,我認爲它應該使它有用嗎? – carpeliam

+0

ActiveResource就像ActiveRecord一樣(並且因爲Rails 3每個類都擴展了ActiveModel :: Naming)會根據它們的名稱生成一個鏈接,就像文檔所說:「查找將發生在類的名稱上。」你總是指自己對象的表示,而不是原始表示。使用ActiveRecord,你指的是你的模型,而不是它後面的數據庫。 ActiveResource也一樣。此外,它甚至不確定ActiveResource類的源代碼是否具有HTML表示,它可能只是XML或JSON。 – iain

+0

現在我想到了,可能有辦法繞過它,那是通過'default_url_options'。這是您可以在application_controller中定義的方法。我不知道它是否會起作用,但它可能值得研究。 – iain

相關問題