2012-04-24 15 views
7

पर आधारित लिंक के साथ या बिना किसी ब्लॉक को कैसे दिखा सकता हूं मेरे पास टैग का एक जटिल ब्लॉक है (<h3>, <p>, ...) कि मैं एक लिंक के साथ या बिना प्रस्तुत करना चाहता हूं एक शर्त के आधार पर इसके चारों ओर लिंक करें।रेल: मैं किसी शर्त (link_to_if)

मुझे पता है के बारे में link_to_if कि इस तरह काम करता है:

<% link_to_if condition, name, path %> 

अगर हालत false केवल नाम रेंडर किया जाएगा है।

<% link_to path do %> 
    [complex content] 
<% end %> 

मैं दोनों के संयोजन हैं:

और मैं के बारे में link_to&block साथ पता है। link_to_if कथन जो &block स्वीकार करता है, ताकि स्थिति false की स्थिति के बिना इसके चारों ओर एक लिंक के बिना प्रस्तुत की जाएगी। दुर्भाग्य से एक &block साथ link_to_if बयान link_to बयान :(पसंद नहीं काम करता है

किसी को भी मेरे लिए सुझाव है किसी भी मदद अत्यधिक सराहना की

उत्तर

23

मैं इसके लिए अपने खुद के सहायक ने लिखा है:?

def link_to_if_with_block condition, options, html_options={}, &block 
    if condition 
     link_to options, html_options, &block 
    else 
     capture &block 
    end 
    end 

आप इसे इस तरह का उपयोग कर सकते हैं:

<%= link_to_if_with_block true, new_model_path { "test" } %> 
<%= link_to_if_with_block true, new_model_path do %> 
    Something more complicated 
<% end %> 
+0

मुझे लगता है कि मुझे यह पसंद है। – DiegoFrings

+0

मुझे नहीं पता कि यह 'link_to' के सभी अलग-अलग तर्कों को पारित करने के साथ कैसे काम करता है, लेकिन मुझे लगता है कि जब आपको कुछ और परिष्कृत की आवश्यकता होती है तो आप इसे समझ लेंगे;) – klump

+0

हमम। आपकी सहायक विधि के साथ कुछ अजीब है। यदि मैं '<%= %>' के साथ हेल्पर का उपयोग करता हूं, तो स्थिति एक बार (इसके चारों ओर एक लिंक के साथ) प्रदान की जाएगी यदि स्थिति सत्य है, लेकिन स्थिति गलत होने पर दो बार (एक लिंक के बिना) :( – DiegoFrings

3

मैं सिर्फ ओवरराइट कर विधि कारण में बनाया ब्लॉक उपयोग वे वास्तव में हमारे उपयोग के लिए ज्यादा समझ में नहीं आता है। बस इसे एक सहायक में जोड़ें और यह link_to_if को link_to की तरह ही काम करेगा।

def link_to_if(*args,&block) 
    args.insert 1, capture(&block) if block_given? 

    super *args 
end 
संबंधित मुद्दे