Rails:Devise form.submit按钮背后的逻辑是什么?

时间:2014-12-04 15:01:47

标签: ruby-on-rails forms devise

我正试图掌握Rails,而且我一直在努力获得一个8个问题的多项选择问题测验。

我想我理解MVC方面的事情。来自浏览器的请求来自控制器。它要求模型中的信息,将其发送到视图并将内容返回给浏览器(如果我错了,请纠正我)。

我不明白(非常清楚,至少)网页如何“知道”链接到哪里。我认为,当你生成一个资源时,你会得到许多映射到路径的路由。我不明白这些路径何时相关。

有人可以向我解释(如有必要,一步一步)设计表单中的提交按钮如何“知道”链接到哪里?

到目前为止,我的表格看起来像这样:

<%= form_for([current_user]) do |f| %>
  <p>
    <%= f.check_box :quiz_answers %>
  </p>
  <p>
    <%= f.submit("Get my results!") %>
  </p>
<% end %>

我在那里看不到任何名称是路径或路线的名字。那么,如何生成链接?

我检查过rake路线,但我不认为我很欣赏那个列表的重要性。如果有人可以解释其背后的意思,那就太棒了。

1 个答案:

答案 0 :(得分:0)

我会尝试解释它。

您可以通过网页发送几种类型的方法: -得到 -POST -删除 -put

通过链接获取发送参数。您可以在URL中查看其参数,例如www.google.ba?you_are=user,you_are是参数,其值是user。

Post通过包发送参数,因此您无法在网址中看到任何内容,但信息仍然存在。

其他方法是用于休息服务的POST方法的变体。

对于你的问题,devise默认创建一些在routes.rb中不清晰可见的路由。您的网页上的任何请求都会转到routes.rb,检查它应该委派给哪里,然后将其发送到相应的控制器。 Controller然后将参数做一些逻辑(将其委托给服务和其他东西),为show准备模型,然后将其委托给模板。然后,将包含所有信息(呈现)的模板发送到Web浏览器。

有一点需要注意,资源或设计为每个方法创建相应操作的默认操作。在这种情况下,您只需要设置模型,它就知道在哪里委派它。

以下是我的设计路线(其中一些是自定义的):

new_user_session GET      /users/sign_in(.:format)                                    user_sessions#new
                   user_session POST     /users/sign_in(.:format)                                    user_sessions#create
           destroy_user_session DELETE   /users/sign_out(.:format)                                   user_sessions#destroy
                  user_password POST     /users/password(.:format)                                   passwords#create
              new_user_password GET      /users/password/new(.:format)                               passwords#new
             edit_user_password GET      /users/password/edit(.:format)                              passwords#edit
                                PATCH    /users/password(.:format)                                   passwords#update
                                PUT      /users/password(.:format)                                   passwords#update
       cancel_user_registration GET      /users/cancel(.:format)                                     users#cancel
              user_registration POST     /users(.:format)                                            users#create
          new_user_registration GET      /users/sign_up(.:format)                                    users#new
         edit_user_registration GET      /users/edit(.:format)                                       users#edit
                                PATCH    /users(.:format)                                            users#update
                                PUT      /users(.:format)                                            users#update
                                DELETE   /users(.:format)                                            users#destroy
              user_confirmation POST     /users/confirmation(.:format)                               confirms#create
          new_user_confirmation GET      /users/confirmation/new(.:format)                           confirms#new
                                GET      /users/confirmation(.:format)                               confirms#show

在终端中使用rake routes命令查找所有路由。