如何在 Rails 5.1 中的 Webpacker / React-rails 中使用 Rails Url 帮助器

cha*_* ly 4 react-rails ruby-on-rails-5 react-on-rails webpacker

我正在使用web-packerReact-rails gem 来构建一个在线旅行应用程序。我在 JSX 视图中使用 Rails URL 助手和服务器端渲染时遇到问题:

例如在我的 jsx 视图中:

#project/app/javascript/packs/app/components/front_end/SearchTripItemComp.erb
<%= link_to "Book Now!", search_trips_path, className: 'btn btn-book' %>
Run Code Online (Sandbox Code Playgroud)

运行后我得到这个错误:

在此输入图像描述

我能想到的解决方法是将 search_trips_path 作为 props 从 Rails 视图传递给组件,或者直接使用 Rails.application.routes.url_helpers ,但这非常不方便,特别是对于那些具有许多链接的 jsx 视图。

我尝试查看 web-packer 文档,但似乎 gem 不支持 erb 加载器的 Rails 视图助手。

请各位帮忙指点一下!

ps:我已经正确配置了 erb webpacker 加载程序。

小智 5

在你的 jsx 视图中尝试一下:

#project/app/javascript/packs/app/components/front_end/SearchTripItemComp.erb
<%= ActionController::Base.helpers.link_to "Book Now!", Rails.application.routes.url_helpers.search_trips_path, className: 'btn btn-book' %>
Run Code Online (Sandbox Code Playgroud)

使用:

Rails.application.routes.url_helpers.*_path
Run Code Online (Sandbox Code Playgroud)

代替

*_path
Run Code Online (Sandbox Code Playgroud)

在您的 .erb 文件中,外部视图适用于 url_helpers。

Rails.application.routes.url_helpers.search_trips_path

如果您需要从模型或其他地方生成 URL,那么 ActionController::UrlFor 就是您所需要的。请继续阅读了解简介。一般来说,该模块不应单独包含,因为它通常由 url_helpers 包含(如 Rails.application.routes.url_helpers 中)。

ActionDispatch::路由::UrlFor

类似地,对于 link_to 您可以使用:

ActionController::Base.helpers.link_to
Run Code Online (Sandbox Code Playgroud)