2016-12-03 18 views
1

私はレールコンソールでいくつかのヘルパーをテストしようとしています。Rails 5コンソール内でヘルパーを実行する

私はいくつかの手法を説明しているanother answerを読んでいます。私はhelpersオブジェクトに私のヘルパーを呼び出して起動する私の最初の試みで、

[10] pry(main)> helper.class 
=> ActionView::Base 
[1] pry(main)> helper.link_to gravatar_for(User.first, size: 50), User.first 
    User Load (0.2ms) SELECT "users".* FROM "users" ORDER BY "users"."id" ASC LIMIT ? [["LIMIT", 1]] 
NoMethodError: undefined method `gravatar_for' for main:Object 
from (pry):1:in `__pry__' 
[2] pry(main)> include UsersHelper 
=> Object 
[3] pry(main)> helper.link_to gravatar_for(User.first, size: 50), User.first 
    User Load (0.2ms) SELECT "users".* FROM "users" ORDER BY "users"."id" ASC LIMIT ? [["LIMIT", 1]] 
NoMethodError: undefined method `image_tag' for main:Object 
from /Users/max/Dropbox/work/src/github.com/mbigras/micro-twitter/app/helpers/users_helper.rb:7:in `gravatar_for' 
[4] pry(main)> include ActionView::Helpers::AssetTagHelper 
=> Object 
[5] pry(main)> helper.link_to gravatar_for(User.first, size: 50), User.first 
    User Load (0.1ms) SELECT "users".* FROM "users" ORDER BY "users"."id" ASC LIMIT ? [["LIMIT", 1]] 
    User Load (0.1ms) SELECT "users".* FROM "users" ORDER BY "users"."id" ASC LIMIT ? [["LIMIT", 1]] 
ArgumentError: arguments passed to url_for can't be handled. Please require routes or provide your own implementation 
from /Users/max/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/actionview-5.0.0.1/lib/action_view/helpers/url_helper.rb:38:in `url_for' 
[6] pry(main)> include ActionView::Helpers::UrlHelper 
=> Object 
[7] pry(main)> helper.link_to gravatar_for(User.first, size: 50), User.first 
    User Load (0.3ms) SELECT "users".* FROM "users" ORDER BY "users"."id" ASC LIMIT ? [["LIMIT", 1]] 
    User Load (0.2ms) SELECT "users".* FROM "users" ORDER BY "users"."id" ASC LIMIT ? [["LIMIT", 1]] 
ArgumentError: arguments passed to url_for can't be handled. Please require routes or provide your own implementation 
from /Users/max/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/actionview-5.0.0.1/lib/action_view/helpers/url_helper.rb:38:in `url_for' 
[8] pry(main)> include ActionController::Metal 
TypeError: wrong argument type Class (expected Module) 
from (pry):8:in `include' 
[9] pry(main)> 

は、それから私は私がviews_helperオブジェクトを作成し、その答えで見た別の手法を試してみました。正直なところ、helperオブジェクトがviews_helperオブジェクトとどのように違うのかよく分かりませんが、いずれの方法でもまだコマンドを実行できませんでした。

[15] pry(main)> views_helper.class 
=> ActionView::Base 
[11] pry(main)> views = Rails::Application::Configuration.new(Rails.root).paths["app/views"]; nil 
=> nil 
[12] pry(main)> views_helper = ActionView::Base.new views; nil 
=> nil 
[13] pry(main)> views_helper.link_to gravatar_for(User.first, size: 50), User.first 
    User Load (0.1ms) SELECT "users".* FROM "users" ORDER BY "users"."id" ASC LIMIT ? [["LIMIT", 1]] 
    User Load (0.1ms) SELECT "users".* FROM "users" ORDER BY "users"."id" ASC LIMIT ? [["LIMIT", 1]] 
ArgumentError: arguments passed to url_for can't be handled. Please require routes or provide your own implementation 
from /Users/max/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/actionview-5.0.0.1/lib/action_view/helpers/url_helper.rb:38:in `url_for' 
[14] pry(main)> 

私は「私のヘルパーちょうど仕事 "そう、すべてを含む」コンソールでonelinerをどこかのconfig/envをファイルに何かを置く、または実行できるようにしたいと思います。これは可能ですか?

答えて

0

ヘルパーメソッドをコンソールに自動的に読み込むことについてはわかりませんが、 コンソールでApplicationController.helpers.your_methodを呼び出すと、個々のヘルパーメソッドにアクセスできます。

0

私は私のRails 5.1のアプリでhelper.link_toを使用しようとしたとき、私は同じ

ArgumentError: arguments passed to url_for can't be handled. Please require routes or provide your own implementation 

エラーに遭遇しました。このようなhelperオブジェクトにroute.url_helpers含む

は私のために問題を修正:メソッドを定義するために、あなたが自己を使用する必要があり、

UserHelper.some_method 

しかし:

main > helper.singleton_class.include Rails.application.routes.url_helpers 
=> #<Class:#<ActionView::Base:0x00007fb02c2f7478>> 

main > helper.link_to 'user', User.find(1) 
=> "<a href=\"https://stackoverflow.com/users/1\">user</a>" 
0

簡単な方法は、使用モジュールの名前空間であります:

module UserHelper 
    def self.some_method 
    puts 'hello world!' 
    end 
end 
関連する問題