首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >rails-4设计+用户控制器编辑路由重定向到错误的位置

rails-4设计+用户控制器编辑路由重定向到错误的位置
EN

Stack Overflow用户
提问于 2013-08-18 20:47:18
回答 1查看 609关注 0票数 0

我在我的应用程序和一个定制的用户控制器中使用了devise。我有指向的链接,在显示和索引页面中编辑用户。登录后,如果我单击user /index.html.erb中的编辑链接或用户/ed.html.erb,即使发送了GET请求,它也会重定向到用户新表单。

在路由中,我跳过了注册,因为我使用用户控制器来处理它,而且它工作得很好。

这是路线

代码语言:javascript
复制
devise_for :users, :path_prefix => 'd', skip: [:registrations], controllers: {sessons: "sessions"}
resources :users

rake路由\ grep edit_user给出

代码语言:javascript
复制
  edit_user_password GET    /d/users/password/edit(.:format) devise/passwords#edit                                                                
  edit_user GET    /users/:id/edit(.:format)        users#edit

用户/show.html.erb

代码语言:javascript
复制
 <div class="btn btn-primary"> <%= link_to "Edit", edit_user_path(@user) %></div>

这是当我点击索引或显示页面中的编辑链接时出现的注册表单的屏幕截图。它正在发出get请求,但是显示表单是新建的,而不是用于编辑的表单。

是单击显示页面中的编辑链接:的日志。

代码语言:javascript
复制
  Started GET "/users/17/edit" for at 2013-08-19 08:40:49 +0000                                                                       
    Processing by UsersController#edit as HTML                                                                                                        
    Parameters: {"id"=>"17"}                                                                                                                        
    User Load (0.2ms)  SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1  [["id", "17"]]                                                 
    User Load (0.3ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 17 ORDER BY "users"."id" ASC LIMIT 1                                      
    Rendered users/_form.html.erb (17.5ms)                                                                                                          
    Rendered users/edit.html.erb within layouts/application (26.8ms)                                                                                
    Completed 200 OK in 50ms (Views: 47.1ms | ActiveRecord: 0.5ms

The users_controller.rb

代码语言:javascript
复制
class UsersController < ApplicationController
   before_action :set_user, only: [:show, :edit, :update, :destroy]
   before_filter :authenticate_user!, except: [:new, :create]
   respond_to :html, :json

   def show
   end

   def edit
   end

   private

   def set_user
      @user = User.find(params[:id])
   end

 end

用户/_ed.html.erb I甚至在表单中指定url路径,它仍然呈现新的表单

代码语言:javascript
复制
 form_for(@user, :url => edit_user_path(@user))

用户/ed.html.erb

代码语言:javascript
复制
  <%= render "edit" %>

用户/index.html.erb

代码语言:javascript
复制
 <% @users.each do |user| %>

  <div class="btn btn-primary"><%= link_to "Edit", edit_user_path(user) %> </div>
  <div class="btn btn-danger"><%= link_to 'Remove', user, method: :delete, data:    {confirmation: 'Are you sure'} %></div>
  <% end %>
EN

回答 1

Stack Overflow用户

发布于 2013-08-19 02:52:31

您正在向编辑用户路径发出POST请求,而此路径是通过GET方法注册的。这就是为什么你会犯这个错误。

就我个人而言,我不会跳过注册,我会覆盖注册控制器,如设计wiki中所描述的那样。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18303499

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档