我有一个简单的问题,其中routes / url名称由用户角色决定。目前显示的路线为/new_admin/dispensaries
。如果用户具有经理或执行人员的角色,则指定的路线应为“/ dashboards / dispensaries”。
这很简单但很困难的是我的routes.rb:
命名空间:new_admin do 资源:vendor_templates 资源:markdown_docs 资源:email_lists
namespace :moderation do
resources :reported_reviews
end
resources :users do
member do
get :user_bans
post :ban_unban, to: 'user_bans#create'
delete :ban_unban, to: 'user_bans#destroy'
end
end
# TODO - this should be written generically to support dispensary/doctors/whatever
get '/dispensaries/reviews', :to => "reviews#all", :as => :all_reviews
get '/dispensaries/pictures', :to => "pictures#all", :as => :all_pictures
get '/dispensaries/videos', :to => "videos#all", :as => :all_videos
get "/dispensaries/autocomplete", to: "dispensaries#autocomplete"
resources :vendors do
resources :ownership_transfers, only: [:new, :create]
end
...
我有点陷入困境,因为如果我更改new_admin路由,那么很多其他路由都会受到影响。伙计们好吗?
答案 0 :(得分:0)
我们实际上做过这样的事情。它并不漂亮,但这个解决方案对我们有用:
<强>蛞蝓强>
您基本上是指一种名为Slugs的路线。这是您使用名称而不是ID的地方,允许您创建用户友好的路线(例如/delivery/today
)。问题是,为了创建这些路由,您必须在路径文件
您可以使用两种宝石来处理您的迷路 - FriendlyID&amp; Slugalicious。这两个都允许你创建slugged路线,但FriendlyID基本上只是改变ID,而Slugalicious是一个完全独立的系统
我们在下面的代码中使用了Slugalicious,但是,您可能需要FriendlyID(有一个RailsCast for it here):
<强>路由强>
您遇到的问题是路由超出了RESTful控制器接口的范围,这意味着您必须在routes.rb文件中调用除resources
引用之外的所有路由
如果您使用Slugalicious,它有自己的Slugs
数据库,这意味着我们可以使用它来动态创建路由,如下所示:
#Slugs
begin
Slug.all.each do |s|
begin
get "#{s.slug}" => "#{s.sluggable_type.downcase.pluralize}#show", :id => s.slug
rescue
end
end
rescue
end
这是实时代码,并动态输出routes文件中的所有slug。我们设法以编程方式更新它的方法是使用像这样的Observer类:
class SlugObserver < ActiveRecord::Observer
def after_save(slug)
Rails.application.reload_routes!
end
def after_destroy(slug)
Rails.application.reload_routes!
end
end
我感谢您可能已经得到了答案,但是因为您是初学者,我觉得我可以通过为您解释slug来帮助我们