2014-09-11 28 views
0

這看起來像是一種不尋常的情況。動態確定收集路徑是否存在

如果我動態地給出了一個「@model」變量,它可以是任何ActiveRecord模型類,我該如何檢查該模型是否有相應的「/ models」路徑?

有時候模型是另一個資源內部的淺層資源......意思是它自己從來沒有「/ models」路徑,所以url_helper不存在。

我可以做到這一點,但它很爛!

Rails.application.routes.url_helpers.methods.include? "#{@model.to_s.pluralize.downcase}_path" 
+0

你在使用STI嗎?或者爲什麼你的模型對象可以全部輸入或不輸入? – 2014-09-11 06:42:43

+0

我正在看的代碼使用DRY控制器。哪些工作正常,但在某些地方有太多的巫術正在進行。希望有一種更簡單的方法來檢測收集路線。 – Dolbery 2014-09-11 07:08:34

回答

0

我建議將簡單資源與嵌套資源分開。那麼你只需要處理一種路線(簡單路線)。從管理員:: Base的控制器一樣繼承你的控制器:

class Admin::BaseController < ApplicationController 
    # abstracted admin logic 
end 

class Admin::PeopleController < Admin::BaseController 
end 
class Admin::CategoriesController < Admin::BaseController 
end 

,並在視圖中使用多態pathes像:

<%= link_to 'all', @model_object.class.name.underscore.pluralize %> 
<%= link_to 'show', @model_object %> 
<%= link_to 'new', [:new, @model_object] %> 
<%= link_to 'edit', [:edit, @model_object] %> 
<%= link_to 'delete', @model_object, method: :delete %> 
<%= form_for @model_object do |f| %> 
    <!--Create or Update form for model object--> 
<% end %> 

也瞭解多態路線:Simple RESTful Ruby on Rails routes
如果可能,我會使用現有的管理寶石,如ActiveAdminRailsAdmin。它們通常足夠了。