命名空间路由导致噩梦

pie*_*erk 0 ruby routes ruby-on-rails

我正在学习Rails 3,但路线让我发疯.我正在尝试使用命名空间来分隔网站的管理部分.问题是命名空间中的某些东西根本不起作用,也会路由到错误的位置.例如,通过指定资源,使用rails生成的路由,当传递对象时,视图指向错误的路径,因此编辑表单将不起作用.

即使路线确实存在,链接与link_to也不起作用.首先,这是从rake路由输出的命名空间路由.

namespace :admin do
  resources :users
end


admin_users GET        /admin/users(.:format)          {:action=>"index", :controller=>"admin/users"}
                POST   /admin/users(.:format)          {:action=>"create", :controller=>"admin/users"}
 new_admin_user GET    /admin/users/new(.:format)      {:action=>"new", :controller=>"admin/users"}
edit_admin_user GET    /admin/users/:id/edit(.:format) {:action=>"edit", :controller=>"admin/users"}
     admin_user PUT    /admin/users/:id(.:format)      {:action=>"update", :controller=>"admin/users"}
                DELETE /admin/users/:id(.:format)      {:action=>"destroy", :controller=>"admin/users"}
Run Code Online (Sandbox Code Playgroud)

控制器:

class Admin::UsersController < ApplicationController

  def index
    @users = User.all
  end

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

  def new
    @user = User.new
  end

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

  def create
    @user = User.new(params[:user])
    if @user.save
      redirect_to(@user, :notice => 'User was successfully created.')
    else
      render :action => "new"
    end
  end

  def update
    @user = User.find(params[:id])
    if @user.update_attributes(params[:user])
      redirect_to(admin_users_path, :notice => 'User was successfully updated.')
    else
      render :action => "edit"
    end
  end

  def destroy
    @user = User.find(params[:id])
    @user.destroy
    redirect_to(admin_users_path)
  end
end
Run Code Online (Sandbox Code Playgroud)

示例视图:index.html.erb列出所有用户

<h1>Listing users</h1>

<table>
<% for user in @users %>
  <tr>
    <td><%= user.id %></td>
    <td><%= user.username %></td>
    <td><%= user.email %></td>
    <td><%= link_to 'Show', @user %></td>
    <td><%= link_to 'Edit', edit_admin_user_path(user) %></td>
    <td><%= link_to 'Destroy', admin_user_path, :confirm => 'Are you sure?', :method => :delete %></td>
  </tr>
<% end %>
</table>

<br />

<%= link_to 'New User',  new_admin_user_path %>
Run Code Online (Sandbox Code Playgroud)

使用编辑视图也存在问题.编辑表单应指向更新路由但不指向.相反,当仅传递User对象时,它指向编辑路径(基本上是自身).从我一直在阅读使用表单中的对象是推荐的方式,但如果它不起作用,这是一件好事.

我在列出所有用户页面时收到此错误.

No route matches {:action=>"update", :controller=>"admin/users"}

Extracted source (around line #17):
17:     <td><%= link_to 'Destroy', admin_user_path, :confirm => 'Are you sure?', :method => :delete %></td>
Run Code Online (Sandbox Code Playgroud)

我是如此努力坚持不懈,但这让我变得不稳定.仅供参考:是的我知道那里有认证框架,但我试图从头开始制作一个.这是一种学习体验,因此只是使用宝石和插件不是我认为的方式.

谢谢Onyth

Aug*_*sto 5

您在删除链接中缺少ID

试试吧

<td><%= link_to 'Destroy', admin_user_path(user), :confirm => 'Are you sure?', :method => :delete %></td>
Run Code Online (Sandbox Code Playgroud)

(将admin_user_path更改为admin_user_path(user)作为链接)

  • 尝试`<%= form_for [:admin,@ user] do%>` (3认同)