2011-09-15 31 views
1

在Rails 2控制器我從一個模型url_for在控制器

@company = Company.first 

得到一些數據,並在視圖

<%= url_for @company %> 

當然這工作正常生成的URL。但是當我嘗試在腳本中使用此

include ActionController::UrlWriter 
default_url_options[:host] = 'www.example.com' 

@company = Company.first 
puts url_for(@company) 

它失敗

/gems/actionpack-2.3.8/lib/action_controller/url_rewriter.rb:127:in'合併':不能將公司轉換爲散列(TypeError)

任何想法?

回答

1

我認爲這個問題可能是,你用來調用你的意見(and defined on ActionView as a helper)的url_for方法相同url_for方法,當你在一個控制器是被調用。

ActionController::Base有其自己的,類似(但不相同)的方法,稱爲url_for方法。在您的控制器範圍內,ActionController::Base上定義的方法是被調用的方法。 http://apidock.com/rails/ActionController

上面的ActionController文檔鏈接在技術上指向了Rails3版本的API,但它並沒有真正改變。如果你絕對需要或想要Rails 2.3文檔,你可以download them here

0

這些方法都不一樣。

在您看來,您打電話給ActionView::Helpers::UrlHelper#url_for。該方法會根據您傳入的數據類型來決定要執行的操作。如果傳入模型對象,則最終使用方法ActionController::PolymorphicRoutes#polymorphic_path,該方法會計算出應該使用哪條命名路徑。您在腳本中調用的url_for不知道如何執行任何操作。但是,它仍然可以做很多事情,我建議您閱讀該文件中的註釋以瞭解如何使用它。你得到的錯誤信息將指出你的權利。

/gems/actionpack-2.3.8/lib/action_controller/url_rewriter.rb

(注意:ActionPack的2.3.14,請你可能希望在你在它升級)