运行 内的助手 Rails 5 个控制台
Run helpers inside Rails 5 console
我正在尝试在 rails 控制台中测试一些助手。
我读了 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)>
我希望能够将某些内容放入 config/env 文件中的某处,或者 运行 在 "includes everything so my helpers 'just work'" 控制台上的 oneliner。这可能吗?
我不确定是否可以将辅助方法自动加载到控制台中,但是
您可以通过在控制台中调用 ApplicationController.helpers.your_method
来访问各个辅助方法。
我运行变成一样
ArgumentError: arguments passed to url_for can't be handled. Please require routes or provide your own implementation
当我尝试在我的 Rails 5.1 应用程序中使用 helper.link_to
时出错。
像这样将 route.url_helpers
包含到 helper
对象中解决了我的问题:
main > helper.singleton_class.include Rails.application.routes.url_helpers
=> #<Class:#<ActionView::Base:0x00007fb02c2f7478>>
main > helper.link_to 'user', User.find(1)
=> "<a href=\"/users/1\">user</a>"
简单的方法是使用模块命名空间:
UserHelper.some_method
但是,您应该使用 self 来定义方法:
module UserHelper
def self.some_method
puts 'hello world!'
end
end
我正在尝试在 rails 控制台中测试一些助手。
我读了 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)>
我希望能够将某些内容放入 config/env 文件中的某处,或者 运行 在 "includes everything so my helpers 'just work'" 控制台上的 oneliner。这可能吗?
我不确定是否可以将辅助方法自动加载到控制台中,但是
您可以通过在控制台中调用 ApplicationController.helpers.your_method
来访问各个辅助方法。
我运行变成一样
ArgumentError: arguments passed to url_for can't be handled. Please require routes or provide your own implementation
当我尝试在我的 Rails 5.1 应用程序中使用 helper.link_to
时出错。
像这样将 route.url_helpers
包含到 helper
对象中解决了我的问题:
main > helper.singleton_class.include Rails.application.routes.url_helpers
=> #<Class:#<ActionView::Base:0x00007fb02c2f7478>>
main > helper.link_to 'user', User.find(1)
=> "<a href=\"/users/1\">user</a>"
简单的方法是使用模块命名空间:
UserHelper.some_method
但是,您应该使用 self 来定义方法:
module UserHelper
def self.some_method
puts 'hello world!'
end
end