【问题标题】:Ruby on Rails POST request failsRuby on Rails POST 请求失败
【发布时间】:2017-04-06 10:16:24
【问题描述】:

事情是这样的,我想在Ruby on Rails的一个页面中写一个登录,当url为localhost:3000/admin时,我会得到需要填写的页面。表单填写后,我提交按钮和表单应该允许使用post 方法进入create 操作,但是它仍然可以使用get 方法和new 操作。

它会发生什么?

这是routes.rb 文件:

     Prefix Verb          URI Pattern                Controller#Action
new_admin_users GET      /admin/users/new(.:format)  admin/users#new
   admin_users  POST     /admin/users(.:format)      admin/users#create
         admin  GET      /admin(.:format)            admin/users#new
                POST     /admin(.:format)            admin/users#create
    posts_home  GET      /posts/home(.:format)       redirect(301, /posts)
   posts_about  GET      /posts/about(.:format)      redirect(301, /about)

那么这里是新动作

  <form class="form-signin">
    <h2 class="form-signin-heading">Please sign in</h2>
    <%= form_for :user,url:admin_users_path do |f| %>
      <p>
        <%= f.label :name%><br>
        <%= f.text_field :name ,class:"form-control" %>
      </p>
      <p>
        <%= f.label :pass%><br>
        <%= f.text_field :pass,class:"form-control" %>
      </p>
      <div class="checkbox">
        <label>
          <input type="checkbox" value="remember-me"> Remember me
        </label>
      </div>
      <p>
        <%= f.submit'Sign in', :class=>"btn btn-lg btn-primary btn-block" %>
      </p>
      <%= link_to 'Back', posts_path %>
    <%end%>
  </form>

这里是routes.rb

   Rails.application.routes.draw do
     namespace :admin do
       resources :users
       get "",  to:"users#new"
       post "", to:"users#create"
     end
     get "/posts/home",  to: redirect("/posts")
     get "/posts/about", to: redirect("/about")
     resources :posts do
       resources :comments
     end
     root "posts#index"
     get "/home",to: "posts#index"
     get "/about",to: "posts#about"
   end

如果你有什么经验,请告诉我,提前谢谢!

【问题讨论】:

  • 你分享的routes.rb,貌似是rake routes的结果。请输入config/routes.rb
  • 对不起,我忘记了。这是routes.rb的代码

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


【解决方案1】:

您必须在控制器中构建实际的 User 对象。尝试在表单中使用它而不是符号 :user

<%= form_for @user, url: admin_users_path do |f| %>
...

【讨论】:

    【解决方案2】:

    您可以尝试显式指定方法 post 而不是

    <%= form_for :user,url:admin_users_path do |f| %>
    

    使用这个:

     <%= form_for :user,url:admin_users_path, method: :post do |f| %>
    

    还要检查以这种方式创建的表单中创建的操作

    希望对你有帮助

    【讨论】:

    • 抱歉告诉你方法不行,还是谢谢你,你是个热心人~
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-07
    • 1970-01-01
    • 1970-01-01
    • 2012-10-02
    • 2014-06-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多