2013-10-11 43 views
0

在我的情況下,我得到一個資源的實例,我必須找出,它是模型類代表單數還是複數資源。如何找出Rails模型實例是否是單一資源?

我通過Rails.application.routes和它的實例變量進行挖掘,但沒有找到任何解決此問題的可能性。

更新:

我使用polymorphic_path傭工在包括一些模塊到模型和控制器寶石匿名模型實例。最終目標是爲REST控制器和模型提供一些自動機制,並提供當前模型/實例及其祖先的路徑/路徑。

我最新的嘗試看起來類似的東西:

Rails.application.routes.instance_variable_get(:@router).instance_variable_get(:@routes).instance_variable_get(:@named_routes).delete_if{|k,v| !k.match(/my_model_name_as_downcased_string_here/)}.values.map{|v| v.instance_variable_get(:@defaults)}.map{|h| h[:action]} 

在此希望它會帶來後續行動:指數複數模型和:由單。必須有一種方法來利用自省來找出一個模型是否是一個單一模型,我根本找不到這個模型。

+3

模型和路線之間沒有隱含的聯繫,理論上模型可能有多條路線。你想要解決什麼問題,可能有更好的解決方案? – Gareth

+0

您應該發佈一些您嘗試過的代碼以及您遇到的任何錯誤。用很少的信息很難說出你想要做什麼。 –

+0

感謝您的建議,請參閱我的更新。 – GeorgieF

回答

0

由於我沒有找到任何方法可以找出答案,無論資源是單數還是複數,我都自己創建一些東西。恕我直言,最安全的方式是直接與路線創建掛鉤。下面是我在做任何人的情況下遇到了同樣的問題:

# alias :resource method of Rails routing mapper and remember which resourses 
# are setup as singular 
module ActionDispatch::Routing::Mapper::Resources 
    def resource_with_singular_recognizer *res, &block 
    Rails.application.instance_variable_set(:@sr, ((Rails.application.instance_variable_get(:@sr) || []).push res.first).uniq) 
    resource_without_singular_recognizer *res, &block 
    end 
    alias_method_chain :resource, :singular_recognizer 
end 

# define a model wide method :singular_resource? that checks the previously 
# setup singular resource flag 
module ClassMethods 
    def singular_resource? 
    Rails.application.instance_variable_get(:@sr).include? self.to_s.downcase.to_sym 
    end 
end 

# include :singular_resource? method into all model classes 
module Mongoid::Document 
    def self.included base 
    base.class_eval do 
     extend ClassMethods 
    end 
    end 
end 

我知道:alias_method_chain是不是這裏的最佳選擇,隨意找到一個更好的解決方案。

相關問題