Я все еще изучаю Rails 3, но маршруты сводят меня с ума.Я пытаюсь использовать пространство имен для разделения административного раздела сайта.Проблема в том, что некоторые вещи в пространстве имен просто не работают, а также направляются в неправильное место.Например, используя рельсы, сгенерированные маршруты, указав ресурс, представление указывает на неправильный маршрут при передаче объекта, поэтому форма редактирования не будет работать.
Ссылки с 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"}
Контроллер:
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
Пример представления: 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 %>
Использование представления редактирования также имеет проблему.Форма редактирования должна указывать маршрут обновления, но не указывает.Вместо этого он указывает на маршрут редактирования (в основном сам), когда передается только объект 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>
Я так стараюсь, но это сводит меня с ума.К вашему сведению: Да, я знаю, что существуют рамки аутентификации, но я пытаюсь создать их с нуля.Это опыт обучения, и, по моему мнению, просто использование драгоценных камней и плагинов - это не самый лучший способ.
Спасибо, Онит