在我的应用中,当普通用户登录时,会将其放入显示他们belong_to
公司的服务请求的信息中心上。
当管理员登录时,它们会被放到仪表板上,该仪表板显示可以登录并提交服务请求的所有公司徽标。
普通用户和管理员用户之间的视图几乎完全相同,在表单上的一个或两个实体之外(通过cancan
控制)。因此,如果管理员创建SR或普通用户创建SR,我试图能够使用相同的表单。
routes.rb中:
resources :service_requests do
resources :notes
end
namespace :admin do
get '', to: 'dashboard#index', as: '/'
resources :companies do
resources :service_requests, only: [:index, :new]
end
end
如果管理员登录并单击公司徽标并单击以创建新SR,则路由为/admin/companies/1/service_requests/new
。如果常规用户登录为/service_requests/new
。我对如何为管理员和非管理员方重用相同的表单感到有点困惑。因为我在company_id
ServiceRequestsController
答案 0 :(得分:0)
我执行以下操作,使用admin
上的相同表单和使用not admin
的{{1}}
cancan
在您的表单所在的视图文件上,类似
#models/ability.rb
class Ability
include CanCan::Ability
def initialize(user)
if user.is_admin? #replace this by something that returns true if logged-in user is admin
can :generate_this_form_fields, User
# ^ normally can -> points to a method in the controller, but you can
# create one even if you're not validating any method, just so you could use it anywhere
end
end
end
实际上在视图中,您可以使用
#views/form.html.erb
<%= form_tag ... %>
<% if can? :generate_this_form_fields, User %>
This is where the fields are displayed if admin account
<% else %>
This is where the fields are displayed if not admin
<% end %>
<% end %>
而不是
<% if current_user.is_admin? %>
但我已经以这样的方式做出了这样的例子,可能适合你想要解决的问题。 希望这可以帮助。干杯!