gpt4 book ai didi

ruby-on-rails - articles_path 是如何工作的? (RubyOnRails 教程)

转载 作者:数据小太阳 更新时间:2023-10-29 07:52:18 25 4
gpt4 key购买 nike

我正在关注 the official ruby on rails tutorial我刚刚完成了第 5.9 章。

添加链接应该很简单,但我很困惑。

当我输入 bin/rake routes 时,我得到以下输出:

fl4m3ph03n1x: ~/blog $ bin/rake routes
Prefix Verb URI Pattern Controller#Action
articles GET /articles(.:format) articles#index
POST /articles(.:format) articles#create
new_article GET /articles/new(.:format) articles#new
edit_article GET /articles/:id/edit(.:format) articles#edit
article GET /articles/:id(.:format) articles#show
PATCH /articles/:id(.:format) articles#update
PUT /articles/:id(.:format) articles#update
DELETE /articles/:id(.:format) articles#destroy
root GET / welcome#index
fl4m3ph03n1x: ~/blog $

根据教程,这是有道理的。

为了利用它,我有一个观点:

<h1>New Article</h1>

<%= form_for :article, url: articles_path do |f| %>
<p>
<%= f.label :title %><br>
<%= f.text_field :title %>
</p>

<p>
<%= f.label :text %><br>
<%= f.text_area :text %>
</p>

<p>
<%= f.submit %>
</p>
<% end %>

<%= link_to 'Back', articles_path %>

这个 View 最后有一个提交表单和一个链接。根据 ruby​​,我使用 articles_path 在表单中指定提交按钮链接。在<%= form_for :article, url: articles_path do |f| %> .

我真的不知道那个变量是如何设置的,但我会上钩并接受它。根据教程,点击提交按钮时articles_path默认情况下将是“POST/articles(.:format) articles#create”。

但是,在链接中<%= link_to 'Back', articles_path %> , articles_path应该将我们重定向到索引页面...

谁能解释一下同一个变量如何在同一个 View 中有两种截然不同的行为??

最佳答案

操作 View 方法的工作原理:

link_to 默认请求类型为“GET”。

button_to 默认请求类型为“POST”。

每个生成的路由都有一个特定的类型,这就是 Rails 如何将不同的请求映射到正确的请求。

对于 form_for 操作 View 帮助器方法,它会根据您是否将实例传递给表单自动区分“POST”和“PUT”。

您还可以通过添加显式提供表单的方法类型

method: 'GET' OR :html => { :method => 'GET' }

** 根据 rails 版本检查不同的语法能力。

其他方法也是如此,所以如果你想让 link_to 发送 post 请求,你必须将 method="POST" 传递给它。


**rails 如何区分索引和显示操作**

在生成的路由表中,您可能已经注意到索引操作不需要实例 ID,因为它应该列出所有文章。但是,对于显示,您需要将一个实例传递给它,因为它应该只显示一个特定的实例。

= link_to "index", articles_path
= link_to "show", article_path(article)

注意::

这两个方法不一样,“articles”和“article”,复数vs单数。即使它们的名称相同,其中一个也会采用实例,而另一个则不会。

关于ruby-on-rails - articles_path 是如何工作的? (RubyOnRails 教程),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31628453/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com