📅  最后修改于: 2023-12-03 14:57:22.221000             🧑  作者: Mango
Ruby on Rails 是一个非常强大的 web 框架,它提供了很多方便的函数和辅助方法,例如 url_for
, link_to
, form_for
等等。这些方法通常用于视图文件中生成 HTML。除了这些方法,Rails 还提供了一些辅助方法,可以在视图外使用来方便编写代码。
url_for
url_for
是一个非常强大的方法,可以根据控制器和动作生成 URL。在视图中经常使用它来生成链接和表单。但是有时候我们需要在控制器或者其他地方使用它,比如在一个邮件模板中,你希望生成一个包含链接的邮件。
url_for(controller: 'users', action: 'index')
# => "/users"
你可以使用 url_for
可选的参数,例如 id 和 page 参数:
url_for(controller: 'users', action: 'show', id: 1, page: 2)
# => "/users/1?page=2"
url_for
也可以接受一个 Hash 对象作为参数,它会把 Hash 对象中的键值对编码成 URL 的 Query String,例如:
url_for(controller: 'users', action: 'index', params: { q: 'ruby' })
# => "/users?q=ruby"
link_to
在 Rails 应用程序中, link_to
方法用于生成超链接。通常它用于视图中的 ERB
模板中,但是如果需要在控制器或者其他地方中使用的话,可以在使用前包含它的帮助器模块。
使用 link_to
方法可以生成一个 HTML 超链接。例如:
link_to('Click here', controller: 'users', action: 'index')
# => "<a href='/users'>Click here</a>"
你也可以传递一个模型实例对象作为参数,Rails 会自动根据模型实例的路由来生成 URL。例如:
# 在 routes 中定义了 resources :users
@user = User.find(1)
link_to('User profile', @user)
# => "<a href='/users/1'>User profile</a>"
可以进一步自定义你的链接,例如指定一个样式:
link_to('Click here', controller: 'users', action: 'index', class: 'btn')
# => "<a href='/users' class='btn'>Click here</a>"
form_tag
form_tag
方法用于生成 HTML 表单。它通常用于视图模板中,但你同样可以在控制器或其他地方中使用该方法来生成一个表单。
form_tag(controller: 'users', action: 'create') do
text_field_tag :username
password_field_tag :password
submit_tag 'Create'
end
# => "<form action='/users/create' method='post'><input type='text' name='username'><input type='password' name='password'><input type='submit' value='Create'></form>"
该方法接受一个字符串或 hash 做为第一个参数,第二个参数可以是一个 hash,用于生成表单元素。你可以使用 text_field_tag
, password_field_tag
, checkbox_tag
, radio_button_tag
以及 submit_tag
等方法来生成表单元素。
除此之外,还有一些其它的辅助函数可以在视图外使用,例如:
capture
- 在视图之外捕获渲染的结果。content_tag
- 生成 HTML 标签.escape_javascript
- 在 JavaScript 中转义字符串。auto_discovery_link_tag
- 生成自动发现 RSS 信息的 HTML 标签。javascript_include_tag
- 生成加载 JavaScript 文件的 HTML 块。以上这些方法都可以在视图之外使用,方便我们在控制器以及其他地方使用。