【问题标题】:No route matches [POST] "/sessions/new" (rails 4 in action)没有路线匹配 [POST] "/sessions/new" (rails 4 in action)
【发布时间】:2014-11-11 08:10:08
【问题描述】:

我正在关注 Rails 4 In 操作手册,但遇到以下错误:

No route matches [POST] "/sessions/new" 

我不知道为什么,因为我已经按照教程完成了 T。这让我相信教程本身存在缺陷。无论如何,由于某种原因,当它应该发布到会话#create 时,它​​会发布到会话#new。我做错了什么?

sessions_controller.rb

class SessionsController < ApplicationController
  def new
  end

  def create
    user = User.where(:name => params[:signin][:name]).first
      if user && user.authenticate(params[:signin][:password])
        session[:user_id] = user.id
        flash[:notice] = "Signed in successfully."
        redirect_to root_url
      else
    flash[:error] = "Sorry."
    render :new
    end
  end
end

sessions/new.html.erb

<h1>Sign in</h1>
<%= form_for :signin, method: "POST" do |f| %>
  <p>
  <%= f.label :name %><br />
  <%= f.text_field :name %>
  </p>
  <p>
  <%= f.label :password %><br />
  <%= f.password_field :password %>
  </p>
<%= f.submit "Sign in" %>
<% end %>

routes.rb

  get "/signin", to: "sessions#new"
  post "/signin", to: "sessions#create"

【问题讨论】:

  • 您应该需要指定 form_for 是一种 POST 方法 - 默认情况下它们是发布的,我会尝试删除它。其次,通常你只写“method::post”而不是“POST”)。注意:这可能会也可能不会解决您的问题,但值得一试。
  • 第三,:signin"/signin" 之间有天壤之别——试试后者
  • 感谢@TarynEast,不幸的是,尽管上述方法都没有解决问题。
  • 好的,接下来 - 您正在窗口中运行您的服务器,对吧?点击“登录”按钮,向我们展示点击后该窗口中记录的确切内容。
  • 另外,在您的浏览器中,右键单击并检查表单,查看实际为表单呈现的 html

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


【解决方案1】:

你是对的,这本书有一个错误。

当你有标签的表单时

<%= form_for :signin, method: "POST" do |f| %>

如果 rails 不知道 :signin 是什么意思,那么它会简单地复制当前 url 并将表单提交到该 url(在本例中为 'sessions/new'),使用 post 动词(无论您是否指定不管是不是!)

<form accept-charset="UTF-8" action="/sessions/new" method="post">
....

显然,这不一定是您想要的,因为您没有 /sessions/new 用于 post HTTP 动词,我认为最简单的解决方案是指定路由

post "/signin", to: "sessions#create", as: "signin"

在你的表单中

<%= form_for signin_path do |f| %>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多