【发布时间】:2016-09-09 12:44:00
【问题描述】:
我的视图中有一个模型AdminUser,一个文件夹admin_users,只有2 个视图(dashboard 和index),和一个AdminUsersController,即:
class AdminUsersController < ApplicationController
def dashboard
end
def index
end
def login
if params[:admin_user][:username].present? && params[:admin_user][:password].present?
found_user = AdminUser.where(:username => params[:admin_user][:username]).first
if found_user
authorized_user = found_user.authenticate(params[:admin_user][:password])
session[:admin]=params[:admin_user][:username]
end
end
if authorized_user
redirect_to :controller => 'admin_users', :action => 'dashboard'
else
render :nothing => true, :status => :ok
end
end
end
虽然我有一个登录操作,但我没有它的视图,因为我真的不需要它。
但是 Rails 搜索视图的事实让我觉得我做错了什么;或者至少不以 Rails 的方式做某事。
我应该以其他方式执行此操作吗?
【问题讨论】:
-
没错。如果您不需要查看,则可以跳过它。就像我们不需要销毁和创建视图
-
通常最好遵守映射到
resources在routes.rb文件中生成的REST 端点的标准名称。你这里的东西有点乱,dashboard在DashboardController中最好是index或show。拥有几个人烟稀少的控制器通常比一个塞满垃圾的控制器要好。也别忘了AdminUser.find_by(username: ...)比where(...).first好。 -
@tadman 非常感谢您的建议。 “拥有几个人烟稀少的控制器通常比一个塞满垃圾的控制器要好。”您是否建议我应该为 admin_users 使用多个控制器?这对我来说有点奇怪,我以为每个型号都有一个控制器?
-
一开始会觉得很奇怪,特别是如果有些人只有一个动作,但从长远来看,它会让事情井井有条。您还需要为您的所有管理操作创建一个基本控制器以继承,该控制器在让他们做任何事情之前检查一个人是否具有正确的角色。
-
@tadman 例如,我是否应该只对带有视图的方法使用“admin_users_controller”,而只为登录功能创建一个“admin_users_login_controller”?
标签: ruby-on-rails ruby