url_for в контроллере - PullRequest
       0

url_for в контроллере

1 голос
/ 15 сентября 2011

в контроллере rails 2 я получаю некоторые данные от модели

@company = Company.first

и сгенерируйте URL в представлении

<%= url_for @company %>

Конечно, это отлично работает. Но когда я пытаюсь использовать это в сценарии

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: в `merge ': невозможно преобразовать компанию в хэш (TypeError)

Есть идеи?

Ответы [ 2 ]

1 голос
/ 15 сентября 2011

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

ActionController::Base имеет свой собственный, похожий (но не тот же) метод, который называется url_for.В области действия вашего контроллера вызывается метод, определенный в ActionController::Base.http://apidock.com/rails/ActionController

Ссылка на документы ActionController, приведенная выше, технически указывает на версию API Rails3, но в действительности она не изменилась.Если вам абсолютно необходимы или нужны документы по Rails 2.3, вы можете скачать их здесь .

0 голосов
/ 15 сентября 2011

Это не те же методы.

По вашему мнению, вы звоните ActionView::Helpers::UrlHelper#url_for. У этого метода есть несколько проверок, чтобы решить, что делать, основываясь на типе данных, которые вы передали. Если вы передадите объект модели, вы получите метод ActionController::PolymorphicRoutes#polymorphic_path, который определяет, какой именованный маршрут он должен использовать .

url_for, который вы вызываете в своем скрипте, не знает, как это сделать. Тем не менее, он все еще может сделать совсем немного, и я бы посоветовал вам прочитать комментарии в этом файле, чтобы узнать, как его использовать. Полученное вами сообщение об ошибке укажет вам правду.

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

(Примечание. Доступен пакет действий 2.3.14. Возможно, вы захотите обновить его, пока вы в нем.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...