2010-02-17 19 views
17

मैं अपने ब्रेडक्रंब समाधान के बारे में थोड़ा असुरक्षित हूं। नाम और लिंक प्रत्येक नियंत्रक कार्रवाई में परिभाषित कर रहे हैं:रेल पर रूबी में ब्रेडक्रंब

<a href="http://localhost:3000/">Home</a> 
<% if defined? @l1_link %> 
    > <a href="<%= @l1_link%>"><%= @l1_name %></a> 
    <% if defined? @l2_link %> 
    > <a href="<%= @l2_link%>"><%= @l2_name %></a> 
    <% end %> 
<% end %> 

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

@l1_link = user_path() 

प्रश्न: मुझे लगता है कि स्मार्ट नहीं कर रहा हूँ के रूप में - प्रणाली नेतृत्व के इस प्रकार नीचे कहीं desaster सकता है सड़क? क्या यह (सकल) अक्षम है?

+0

हाय, उत्तर @ सिमोन के लिए धन्यवाद - मुझे आपके समाधान पसंद हैं, कभी भी मेरे कार्यों से पहले परिभाषा को स्थानांतरित करके DRY-ing के बारे में सोचा नहीं। मैं इसे तुरंत ले जाऊंगा। @Lolindrath - हाँ, विभाजन अच्छा है, हालांकि मेरा ऐप पर्याप्त साफ नहीं है (और नाम बदलते हैं, और i18n आदि ...) @ क्रिस्टोफर: एपिसोड की जांच करने के लिए, टिप्पणी नहीं मिली 3. (क्यों पूर्ण उबाऊ वस्तुओं?), लेकिन एनआर। 2 निश्चित रूप से मुझे कुछ सोचने की ज़रूरत है। धन्यवाद! –

उत्तर

10

यह ज्यादातर की राय की बात है, लेकिन वैसे भी:

  1. मैं नहीं चाहूँगा कि एक दृश्य में ज्यादा तर्क यह है कि। हमने शायद यह सब किया है, लेकिन यह जल्दी गन्दा हो जाता है।
  2. कोड भविष्य के परिवर्तनों के खिलाफ सुरक्षित नहीं है जो पेड़ की गहराई को प्रभावित करते हैं।
  3. लिंक किए गए चर *_name और *_link के बजाय, मैं कुछ link_to कार्यक्षमता के साथ, उचित वस्तुओं का उपयोग करने का सुझाव दूंगा।

    Split the URL and display it

    एक और अधिक लचीला समाधान नियंत्रक जहां में लागू:

आप एक अच्छा समाधान है कि

<% for page in @page.ancestors.reverse %> 
    <%= link_to h(page.name), page %> &gt; 
<% end %> 
29

ब्रेडक्रंब मेनू अधिकांश रेल अनुप्रयोगों में एक आवर्ती पैटर्न हैं। इस समस्या को हल करने के लिए, मैंने breadcrumbs_on_rails नामक एक प्लगइन बनाई और रिलीज़ की।

आप नियंत्रक

class MyController 

    add_breadcrumb "home", root_path 
    add_breadcrumb "my", my_path 

    def index 
    # ... 

    add_breadcrumb "index", index_path 
    end 

end 

में अपने ब्रेडक्रंब को परिभाषित करने और आप उन्हें अपने ध्यान में रखते हुए प्रस्तुत करना।

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 
<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> 
    <title>untitled</title> 
</head> 

<body> 
    <%= render_breadcrumbs %> 
</body> 
</html> 

भले ही आप प्लगइन का उपयोग नहीं करना चाहते हैं, मैं आपको इसे देखने के लिए प्रोत्साहित करता हूं। यह खुला स्रोत है और आप अपने ऐप के लिए कुछ विचार ले सकते हैं।

+1

यह अच्छा है, लेकिन ब्रेडक्रंब नियंत्रक जिम्मेदारी की बजाय एक दृश्य जिम्मेदारी की तरह लगते हैं। मैं आपके दृश्य में add_breadcrumb विधि कॉल को स्थानांतरित करने की अनुशंसा करता हूं। – Ben

+6

आप अपने कंट्रोलर में विधि को अपने दृश्य में भी कॉल कर सकते हैं। नियंत्रक आपको अपने विचारों में कोड डुप्लिकेशन को कम करने के लिए प्रति-नियंत्रक नेविगेशन स्तर को परिभाषित करने की अनुमति देता है। –

15

मैंने Gretel नामक एक मणि बनाया जो ब्रेडक्रंब बनाने के लिए रेल प्लगइन पर रूबी है। ब्रेडक्रंब को एक अलग कॉन्फ़िगरेशन फ़ाइल में कॉन्फ़िगर किया गया है और दृश्य में चुना गया है।

उदाहरण config/breadcrumbs.rb:

crumb :root do 
    link "Home", root_path 
end 

crumb :projects do 
    link "Projects", projects_path 
end 

crumb :project do |project| 
    link project.name, project_path(project) 
    parent :projects 
end 

crumb :project_issues do |project| 
    link "Issues", project_issues_path(project) 
    parent :project, project 
end 

crumb :issue do |issue| 
    link issue.name, issue_path(issue) 
    parent :project_issues, issue.project 
end 

आपके विचार में:

<% breadcrumb :issue, @issue %> 

अपने अनुप्रयोग/विचारों/लेआउट/application.html में।ERB:

<%= breadcrumbs pretext: "You are here: " %> 
+1

मणि के लिए धन्यवाद, बस इसे जोड़ने का प्रयास किया और मुझे यह "तर्कों की गलत संख्या (0 के लिए 1)" मिलती है। किसी भी सहायता की सराहना की जाएगी! बेस्ट, एलेक्स –

1

तुम भी इस्तेमाल कर सकते हैं एरियन http://github.com/simonc/ariane

इसके साथ

आप ब्रेडक्रम्ब के किसी भी प्रकार उत्पन्न कर सकते हैं, किसी अनुच्छेद में या एक उल/ली :)

यदि आप चाहते हैं कुछ के रूप में लिंक के रूप में विशिष्ट, आप अपना खुद का प्रस्तुतकर्ता बना सकते हैं।

यह उपयोग करने के लिए बहुत आसान है, बस एक before_filter में जोड़ें:

ariane.add 'Home', root_path # in the app controller to have it everywhere 
ariane.add 'Some Page', some_path 
5

सिर्फ ब्रेडक्रंब के लिए किसी भी प्लग का उपयोग न करें। यह लिंक ब्रेडक्रंब उत्पन्न करने के लिए एक कुशल विधि प्रदान करता है। हालांकि

http://szeryf.wordpress.com/2008/06/13/easy-and-flexible-breadcrumbs-for-rails/

, यह एक बहुत पुरानी पोस्ट है, यह अभी भी काम करता है।

1

मैंने crumble मणि का कांटा किया था। इसमें बहुत कम कॉन्फ़िगरेशन विकल्प हैं और यह छोड़ दिया गया है, लेकिन जब मैंने breadcrumbs_on_rails या gretel पर स्विच करने का प्रयास किया, तो मुझे एहसास हुआ कि मुझे अपने विचारों या नियंत्रकों (और उनमें से बहुत से हैं) में कई लाइनें जोड़नी हैं, लेकिन crumble के साथ सभी एक विन्यास फाइल में संग्रहीत है। यदि आप कुछ पैच करना चाहते हैं और एक ही स्थान पर कॉन्फ़िगरेशन पसंद करते हैं, तो मुझे लगता है कि यह अब तक का सबसे अच्छा समाधान है।

संबंधित मुद्दे