首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >articles_path是如何工作的?(RubyOnRails教程)

articles_path是如何工作的?(RubyOnRails教程)
EN

Stack Overflow用户
提问于 2015-07-25 16:07:57
回答 3查看 2.1K关注 0票数 4

我正在跟踪官方的rails红宝石教程,我刚刚完成了第5.9章。

添加链接应该是简单的,但我主要是困惑。

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

代码语言:javascript
复制
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 $  

根据本教程,这是有意义的。

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

代码语言:javascript
复制
<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 %>

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

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

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

有人能解释一下为什么同一个变量在同一个视图中有两个截然不同的行为吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-07-25 16:25:54

操作视图方法的工作方式:

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

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

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

对于form_for操作视图助手方法,它根据是否将实例传递给窗体,自动区分“POST”和“PUT”。

还可以通过添加

代码语言:javascript
复制
method: 'GET' OR :html => { :method => 'GET' }

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

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

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

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

代码语言:javascript
复制
= link_to "index", articles_path
= link_to "show", article_path(article)

通知::

这两种方法是不一样的,“条款”和“文章”,复数和单数。即使他们的名字是相同的,他们中的一个将采取一个实例,而另一个不会。

票数 5
EN

Stack Overflow用户

发布于 2015-07-25 16:57:51

查看HTML生成的输出时,您可以更好地理解它。

<%= form_for :article, url: articles_path do |f| %>生成HTML输出,如下所示

代码语言:javascript
复制
<form accept-charset="UTF-8" action="/articles/create" method="post">

因此,表单使用POST请求向创建操作提交。

对于link_to,默认的请求类型是GET。

为生成的输出如下所示

代码语言:javascript
复制
<a href="/artcles">Back</a>

因此,当它匹配url、请求类型时,它会带您到索引页。

票数 2
EN

Stack Overflow用户

发布于 2015-07-25 16:16:08

这背后有一点魔力,表单生成器知道方法http方法将是POST,而url将是/articles。与开发编辑操作的时候一样,form builder将知道操作将是PATH/PUT,url将是/制品/1,因为您必须传递项目实例以形成帮助。

同样神奇的是link_to助手,他知道默认情况下是GET http方法,除非您确实指定了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31628453

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档