我正在跟踪官方的rails红宝石教程,我刚刚完成了第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 %>这个视图最后有一个提交表单和一个链接。根据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应该将我们重定向到索引页.
有人能解释一下为什么同一个变量在同一个视图中有两个截然不同的行为吗?
发布于 2015-07-25 16:25:54
操作视图方法的工作方式:
link_to默认请求类型为“GET”。
button_to默认请求类型为“POST”。
每个生成的路由都有一个特定的类型,这就是rails如何将不同的请求映射到正确的请求。
对于form_for操作视图助手方法,它根据是否将实例传递给窗体,自动区分“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)通知::
这两种方法是不一样的,“条款”和“文章”,复数和单数。即使他们的名字是相同的,他们中的一个将采取一个实例,而另一个不会。
发布于 2015-07-25 16:57:51
查看HTML生成的输出时,您可以更好地理解它。
<%= form_for :article, url: articles_path do |f| %>生成HTML输出,如下所示
<form accept-charset="UTF-8" action="/articles/create" method="post">因此,表单使用POST请求向创建操作提交。
对于link_to,默认的请求类型是GET。
为生成的输出如下所示
<a href="/artcles">Back</a>因此,当它匹配url、和请求类型时,它会带您到索引页。
发布于 2015-07-25 16:16:08
这背后有一点魔力,表单生成器知道方法http方法将是POST,而url将是/articles。与开发编辑操作的时候一样,form builder将知道操作将是PATH/PUT,url将是/制品/1,因为您必须传递项目实例以形成帮助。
同样神奇的是link_to助手,他知道默认情况下是GET http方法,除非您确实指定了。
https://stackoverflow.com/questions/31628453
复制相似问题