2012-06-24 13 views
7

से नियंत्रक में एक कस्टम विधि के लिए रेल मार्ग पर रूबी मेरे पास नियंत्रक नाम पोस्ट हैं। मेरी /config/routes.rb में, मैं का इस्तेमाल किया है इस -दृश्य

resources :posts 

/app/controllers/posts_controller.rb:

class PostsController < ApplicationController 
    def new 
      @post = Post.new 
    end 

    def show 
      @post = Post.find(params[:id]) 
    end 

    def categoryshow 
      @post = Post.find(params[:category]) 
    end 

    def index 
      @posts = Post.all 
    end 

    def create 
      @post = Post.new(params[:post]) 
      if @post.save 
        flash.now[:success] = "Your Post Successful" 
        redirect_to @post 
      else 
        render 'new' 
      end 
    end 
end 

मैं रेल के लिए नया हूँ और मैं अक्सर मार्गों के साथ भ्रमित हो। मेरे पास एक और static_pages नियंत्रक है। home.html.erb फ़ाइल में है। /app/views/static_pages/home.html.erb

से

def categoryshow 
      @post = Post.find(params[:category]) 
end 

'categoryshow' पदों नियंत्रक की विधि मैं उस का प्रबंधन कैसे करूँ -

कॉल करने के लिए मुझे क्या करना चाहते हैं? अगर मैं 'post_path' का उपयोग करता हूं, तो यह श्रेणीशक्ति कार्रवाई के बजाय इंडेक्स एक्शन पर जाता है।

#

मैंने लिंक के माध्यम से पढ़ा और वहां से कुछ चीजों की कोशिश की। यहाँ समस्या यह है कि मैं का सामना करना पड़ रहा है:

जब मैं config में इस की कोशिश की/routes.rb

resources :posts do 

    collection do 

      get 'categoryshow' 

    end 

end 

यह एक 'categoryshow_posts_path'

उत्पन्न करता है मेरी नजर में, मैं इस प्रयोग किया है:

डीईएफ़ categorys:

<ul class="users"> 

    <%= Post::CATEGORIES.each do |category| %> 

<li> 

    <%= link_to category,categoryshow_posts_path %> 

</li> 

<% end %> 

</ul> 

मेरी पोस्ट नियंत्रक निम्न विधि है कैसे

 @post = Post.find(params[:category]) 

अंत

इस मामले में, मैं निम्नलिखित त्रुटि हो रही है:

ActiveRecord :: RecordNotFound PostsController में # categoryshow

पोस्ट एक आईडी बिना नहीं मिल सका


दूसरे, मैं बाहर गैर साधन संपन्न मार्गों का उपयोग कर के रूप में है कि लिंक आपके द्वारा दी गई में उल्लेख करने की कोशिश की:

match ':posts(/:categoryshow(/:category))' 

ध्यान में रखते हुए, मैं इस का उपयोग कर रहा:

श्रेणियाँ

<ul class="users"> 

<%= Post::CATEGORIES.each do |category| %> 

<li> 

    <%= link_to category,"posts/#{category}" %> 

</li> 

<% end %> 

</ul> 

इस मामले में, हमारा गैर संसाधनपूर्ण मार्ग तभी मेल खाएगा जब कोई अन्य मौजूदा संसाधन मार्ग मेल नहीं खाता है।हालांकि, मैं देख रहा हूँ कि इस शो कार्रवाई मिलान किया जाता है और मैं इस त्रुटि संदेश मिलता है:

इस शो कार्रवाई है:

 @post = Post.find(params[:id]) 

अंत

ActiveRecord डीईएफ़ दिखाने :: PostsController में RecordNotFound # शो

आईडी के साथ पोस्ट नहीं मिला: राजनीति

  • मैं वास्तव में किसी भी मदद की सराहना करता हूं !!

  • धन्यवाद (सिद्धार्थ)

+0

मेरे पास एक ही समस्या है ...:/ क्या आपने इसे हल किया? – roadev

+0

@roadev \t चूंकि प्रश्न चार साल पहले से था, इसलिए मुझे निश्चित रूप से उम्मीद है। –

उत्तर

12

चेक बाहर "Adding More RESTful Actions" sections of the routing docs

resources :posts do 
  collection do 
    get 'categoryshow' 
  end 
end 

या:

resources :posts do 
    get 'categoryshow', :on => :collection 
end 

अनुभाग उसके बाद मनमाने ढंग से मार्गों को जोड़ने की चर्चा है कि अगर अपने सटीक आवश्यकताओं को पूरा नहीं करता है।

ध्यान दें कि मार्ग फ़ाइल स्पष्ट रूप से आदेश दिया गया है: यदि आप किसी अन्य मार्ग के बाद किसी मार्ग से मिलान करने का प्रयास करते हैं, तो पहला मार्ग जीतता है।

+1

बस एक नोट, यदि विधि को पैरामीटर की आवश्यकता है, तो यह 'संग्रह' है, अन्यथा, यह 'सदस्य' है। और दूसरा तरीका बेहतर दिखता है क्योंकि केवल एक नई कार्रवाई को जोड़ा जाना है। 2 या अधिक क्रियाएं होने पर ब्लॉक का उपयोग करें। यही है ना –

+0

@ क्लेबरएस। मैं एक ब्लॉक का उपयोग करने के बारे में ambivalent हूँ या नहीं; मुझे पहले संस्करण को कारणों के बारे में आसान लगता है क्योंकि यह तुरंत स्पष्ट है कि यह किस प्रकार का मार्ग है। –

+0

डेव, मैंने इसे आजमाया। यहां मुझे किस समस्या का सामना करना पड़ रहा है: –

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