2014-12-04 74 views
1

我试图去掌握与Rails和我坚持获得8问题多选题问题测验工作。Rails:Devise form.submit按钮背后的逻辑是什么?

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

我不明白(至少很清楚)页面'知道'如何链接到。我认为,当你生成一个资源时,你会得到映射到路径的大量路线。我不明白这些路径何时相关。

是否有人请向我解释(如果有必要,一步一步地)设计表单中的提交按钮'知道'在哪里链接?

我的形式,到目前为止,看起来是这样的:

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

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

我检查过耙路线,但我不认为我赞赏这个列表的重要性。如果有人能够解释它背后的含义,那就太好了。

回答

0

我会尽力解释它。

有几种类型,你可以通过网页发送方法: -GET -POST -DELETE -put

打通链路发送参数。您可以在URL中查看其参数,例如www.google.ba?you_are=user,you_are是参数,其值是用户。

通过包发送参数,所以你不能在URL中看到任何东西,但信息在那里。

其他方法是用于安静服务的POST方法的变体。

对于你的问题,devise默认创建了一些在routes.rb中不可见的路由。任何通过你的网页发出的请求会转到routes.rb,检查它应该放在哪里,然后发送给相应的控制器。然后控制器将参数做一些逻辑(将其委托给服务和其他事物),为展示准备模型,然后将其委托给模板。然后,将包含所有信息(呈现)的模板发送到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 

使用耙航线终端命令找出所有的路线。

+0

我已经有非设计页面链接,所以我不认为我需要做更多的。 Devise可能知道在哪里“委托”一个请求,但我不知道它在哪里发送请求。我想知道它连接的位置(以及希望的原因)。我已经多次检查耙路线,但我不确定我应该从列表中推断出什么。 – moosefetcher 2014-12-04 15:49:47

+0

看看第三栏。它说(例如,G。用户#编辑)。这意味着它将重定向到用户控制器,编辑操作。所以第一个参数是用户(UsersController),另一个是该控制器内的操作(​​在示例编辑中)。每个MVC应用程序都必须知道将请求发送到哪里,这就是为什么我们需要路由,这就是为什么请求需要/链接到。 – Miknash 2014-12-04 15:54:10