मान लीजिए कि मेरे पास इस तरह की बहुलक संरचना है।रेल - संक्षेप में बहुरूप रूप से नेस्टेड संसाधन के पेरेंट संसाधन को ढूंढना
map.resources :bar, :has_many => :foo
map.resources :baz, :has_many => :foo
map.resources :qux, :has_many => :foo
class Foo
belongs_to :parent, :polymorphic => true
end
class FooController < AC
before_filter :find_parent
...
private
def find_parent
# ugly way:
@parent = if params[:bar_id]
Bar.find(params[:bar_id])
elsif params[:baz_id]
Baz.find(params[:baz_id])
elsif params[:qux_id]
Qux.find(params[:qux_id])
end
end
end
यह बहुत बदसूरत है। जब भी हम एक नई चीज जोड़ते हैं, जो इससे संबंधित हो, तो हमें इसे पहले से_फिल्टर में जोड़ना होगा।
यह भी बदतर हो जाता है। मान लीजिए कि फूस वास्तव में पॉलिमॉर्फिक चीजें हैं जो टिप्पणियां या टैग जैसी कहीं भी दिखाई दे सकती हैं। और लगता है कि आप निम्नलिखित मार्गों है:
map.resources :bar, :has_many => :foo do |bar|
bar.resources :baz, :has_many => :foo
end
map.resources :qux, :has_many => :foo do |qux|
qux.resources :baz, :has_many => :foo
end
... अब हम चाहे पहले bar_id या baz_id के लिए जाँच करने के बारे में चिंता करने की ज़रूरत।
अधिक जटिल संसाधनों के लिए, यह संभव है कि यह सुनिश्चित करने के लिए पर्याप्त नहीं होगा कि आप माता-पिता की आईडी प्राप्त करें।
def get_parent
# fetch the parameter that immediately preceeded :id
@parent = if x = params.before(:id)
# polymorphic find
x.key.to_s[0..-4].classify.constantize.find x.value
end
end
सब के बाद, हमारे मार्गों पहले से ही URL में पैरामीटर के आदेश के आधार पर माता पिता के सांकेतिक शब्दों में बदलना:
क्या आदर्श होगा अगर हम कुछ इस तरह कर सकता है। उस जानकारी को क्यों छोड़ दें?
तो: यह कैसे किया जा सकता है?
आप अंत किया था यह करने के लिए एक सूखी राह तलाशने? – hornairs