你如何設置你的觀點,控制器和路線?控制面板的Rails文件設置?
一個控制器適用於控制面板的所有功能,還是很多?
首先,讓我們試着想一下我們如何查看各種面板。假設我們的控制面板非常簡單。我們有一個面板可以顯示所有已經註冊並可以CRUD的用戶,另一個面板可以顯示已經上傳的所有圖像,我們也可以對這些用戶進行CRUD。
路線:
scope path: 'control_panel' do
get 'users', to: 'panels#users', as: :panel_show_users
get 'photos', to: 'panels#photos', as: :panel_show_photos
end
控制器:
class PanelsController < ApplicationController
def users
@users = User.all
end
def photos
@photos = Photo.all
end
end
查看文件結構:
panels
|_ users.html.erb
|_ photos.html.erb
好吧,現在我不覺得這有什麼問題,只需訪問面板並用數據填充視圖。 您是否看到任何問題?
這裏是我在十字路雖然有點。當我想要創建更新和刪除用戶/照片時應該怎麼做?我應該把它們全部放在PanelsController中嗎?
class PanelsController < ApplicationController
before_action :protect
def users
@users = User.all
end
def update_user
@user = User.find(params[:id])
@user.update(user_params)
end
def photos
@photos = Photo.all
end
def update_photo
@photo = Photo.find(params[:id])
@photo.update(photo_params)
end
private
def protect
redirect_to root_url, error: 'You lack privileges!'
end
end
雖然這將導致大PanelsController,它會自我感覺良好,能夠執行保護動作,只是一個控制器掛鉤。這也將意味着航線將是很容易設置:
scope path: 'control_panel' do
get 'users', to: 'panels#users', as: :panel_show_users
post 'user', to: 'panels#update', as: :panel_create_user
get 'photos', to: 'panels#photos', as: :panel_show_photos
post 'photos', to: 'panels#photos', as: :panel_create_photo
end
我應該在這裏使用資源的路線?
就像我說的,這將導致一個巨大的面板控制器,所以我認爲可能會更好地爲每個資源單獨控制器,然後重定向到panels
意見?
路線:
scope path: 'control_panel' do
resources :users
resources :photos
end
控制器:
class UsersController < ApplicationController
def index
end
def show
end
def new
end
def create
end
def update
end
def destroy
end
end
class PhotosController < ApplicationController
def index
end
def show
end
def new
end
def create
end
def update
end
def destroy
end
end
不過雖然有些怪癖。我在那裏有我的用戶#索引操作,但是如果我有兩條返回所有用戶索引的路線呢?例如,在控制面板中,當人們正在搜索另一個用戶時。我應該在用戶控制器中有兩條路線嗎? def public_users
和def control_panel_users
?這可能是答案。可以設置一個掛鉤在其中運行@users = User.all
,但重定向到不同的位置,並且沒有protect
方法重定向它們。
我該如何保護這些非管理員的路線?我應該將保護方法移到應用程序控制器中嗎?這難道不需要設置?
class ApplicationController < ActionController
before_action :protect
def protect end
end
class StaticController < ApplicationController
skip_before_action [:home, :about, :contact]
def home
end
def about
end
def contact
end
end
但這是我的問題。 1個控制面板控制器或無控制面板控制器。
我真的希望有更多的高級教程在那裏:(對CRUD,MVC和的事情,但沒有像控制面板和AJAX先進的東西書籍十億...