2016-07-19 24 views
1

有沒有辦法讓幾條普通的代碼行可以根據模型定義返回來自正確的model_class的結果,而不是基於代碼行呢?Neo4jrb:一種在做collection_select時查詢model_class的方法

現在,我使用的是一臺發電機,以創建:

<%= f.collection_select(:semanticZoomOut, Class.all.sort { |a,b| a.name <=> b.name }, 
    :id, :name, options = { 
    :prompt => "Please Select an Item", 
    :selected => @instance.semanticZoomOut.map(&:id) 
    }, html_options = {:multiple => true, :class=>"search"}) %> 

其中,「類別」必須手動更改爲每個_form.html.erb。 最好,我想生成這樣的事情:

<%= f.collection_select(:semanticZoomOut, @instance.semanticZoomOut.class.all.sort { |a,b| a.name <=> b.name }, 
    :id, :name, options = { 
    :prompt => "Please Select an Item", 
    :selected => @instance.semanticZoomOut.pluck(id) 
    }, 
    html_options = {:multiple => true, :class=>"search"}) %> 

回答

1

這個怎麼樣?

clazz = @instance.class.associations[:semanticZoomOut].model_class.to_s.constantize 
clazz.all.sort_by(&:name) 

或者,如果你想讓Cypher支架做的工作:

clazz.order(:name) 
+0

如果我沒有記錯。這將給實例​​的類,而不是它的相關節點。 – joshfindit

+0

'@ instance.class'爲你提供了類,然後調用諸如'all','order','where'等等的方法將會爲你提供該類的節點的範圍表示。 「相關節點」是什麼意思? –

+0

相關節點的含義是,如果我在'(instance) - [:SEMANTIC_ZOOM_OUT] - >(zoomedOutObject)'上有'has_many'關係,並且每個都有不同的類,那麼我想要的是類「相關節點」'zoomedOutObject',而不是''instance'的類。 – joshfindit

相關問題