ruby-on-rails - 辅助方法中的参数

标签 ruby-on-rails ruby-on-rails-4

我刚刚看了 Railscasts pro 第 250 集,但有一件事我不明白。我谈论这一行:

<%= link_to "Log out", session_path("whatever"), method: 'delete' %>

作者是这样说的:

session path helper method can expect an id to be passed through here

我的 Controller 操作:

  def destroy
    session[:user_id] = nil
    redirect_to root_path, notice: "Looged out"
  end

在我的route.rb文件中:

  resources :sessions

为什么我不能直接传入 <%= link_to "Log out", session_path(), method: 'delete' %> ?当我这样做时,我收到一个错误:

No route matches {:action=>"show", :controller=>"sessions"} missing required keys: [:id]

为什么这里需要 id?

毕竟我不会在任何地方使用这个参数。

最佳答案

当我们为 Controller 定义路由时,我们将以下行添加到路由文件中

resources :sessions

上面这行隐式创建了 7 个默认路由

                                     sessions GET      /sessions(.:format)                                                                 sessions#index
                                              POST     /sessions(.:format)                                                                 sessions#create
                                  new_session GET      /sessions/new(.:format)                                                             sessions#new
                                 edit_session GET      /sessions/:id/edit(.:format)                                                        sessions#edit
                                      session GET      /sessions/:id(.:format)                                                             sessions#show
                                              PUT      /sessions/:id(.:format)                                                             sessions#update
                                              DELETE   /sessions/:id(.:format)                                                             sessions#destroy

这里,对于 destroy 操作,路线是 /sessions/:id(.:format) 以及 DELETE 方法。由于 url 中需要包含 :id,因此您需要发送一些 id。 id 意味着它不应该只是整数,它可以是字符串之类的任何内容。因此,他们在删除 session 时在该 URL 中使用“whatever”。

关于ruby-on-rails - 辅助方法中的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26211505/

相关文章:

ruby-on-rails - 如何在现有的 Rails 引擎中生成虚拟应用程序

ruby-on-rails - `method_missing':#<Rails::Application::Configuration:0x00> 的未定义方法 `action_mailer'

ruby - Rails:猴子修补 ActiveRecord::Base 与创建模块

ruby-on-rails - Rails 4 不允许的数组参数

ruby-on-rails - ruby rails : Create a new record that belongs to another model

ruby-on-rails - 在 Rails 4 中使用强参数值白名单

ruby-on-rails - 如何在 Rails 网络应用程序上按国家/地区实现版本

ruby-on-rails - Ruby on Rails 4 范围持续 5 条记录

ruby-on-rails - 如何使用带密码的 PEM 证书?

ruby-on-rails - :onclick doesn't work in button_to