【问题标题】:Rails: What's the logic 'behind' the Devise form.submit button?Rails:设计 form.submit 按钮“背后”的逻辑是什么?
【发布时间】:2014-12-04 15:01:47
【问题描述】:

我正在尝试掌握 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 路线,但我认为我并不了解该列表的重要意义。如果有人能解释它背后的含义,那就太好了。

【问题讨论】:

    标签: ruby-on-rails forms devise


    【解决方案1】:

    我会尽力解释的。

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

    Get 通过链接发送参数。你可以在URL中看到它的参数,例如www.google.ba?you_are=user,you_are是参数,它的值是user。

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

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

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

    有一点需要提一下,resource 或 devise 会为每个方法创建默认的 action 来对应 action。在这种情况下,您只需要设置模型,它就知道在哪里委托它。

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

    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 命令找出你所有的路线。

    【讨论】:

    • 我已经有非设计页面链接,所以我认为我不需要做更多的事情。设计可能知道在哪里“委托”请求,但我不知道它在哪里发送请求。我想知道它链接到哪里(希望是为什么)。我反复检查了 rake 路线,但我不确定我应该从列表中推断出什么。
    • 看第三列。它说(例如用户#edit)。这意味着它将重定向到用户控制器,编辑操作。所以第一个参数是用户(UsersController),另一个是该控制器内的操作(​​在示例编辑中)。每个 MVC 应用程序都必须知道将其请求发送到哪里,这就是我们需要路由的原因,这就是请求去/链接到的原因。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-06
    • 2017-10-17
    • 2018-06-18
    • 2020-05-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多