2008-12-21 14 views
8

मैं हमेशा कीवर्ड स्लग वितरित करने के लिए to_param विधि कैसे प्राप्त करूं? मैं मुसीबत यह हो रही इस मार्ग के साथ काम करने के लिए है:रेल से ओवरराइड करने के लिए?

map.pike '/ नीलामी /: auction_id/आइटम /: आईडी',: नियंत्रक => 'आइटम',: कार्रवाई => 'शो'

इससे पहले अधिरोहित to_param

'आइटम/1-कश्मीरी-दुपट्टा'

के लिए काम कर रहा था लेकिन विफल रहता है के साथ 'auction/123/item/1'

अद्यतन:

मैं नहीं कर रहा हूँ सुनिश्चित करें कि वाक्यविन्यास सही है [(संपादित करें: यह सही है: यह काम करता है :-)], या यहां तक ​​कि कुशल भी .... लेकिन हैमल का उपयोग करके, मैंने पाया कि निम्न कोड वांछित लिंक उत्पन्न करने के लिए काम करता है ('नीलामी /: auction_id/आइटम /: आईडी ')

- for auction in @auctions.sort{|a, b| a.scheduled_start <=> b.scheduled_start} 
    -for item in @items 
    - unless auction.current_auction 
     ... pike_path(auction.auction_id, item) 

उत्तर

8

मुझे यकीन नहीं है कि मैं आपका प्रश्न समझता हूं या नहीं। से

(यह 3:41 यहाँ है) मैं क्या देखते हैं, तो आप सीधे, auction_id विधि का उपयोग करने के बजाय pike_path(auction, item) का उपयोग करने का है कि #to_param का उपयोग करेंगे।

इसके अलावा, यह auction/123/item/1 के लिए विफल हो सकता है क्योंकि आपने अपना नियंत्रक नहीं बदला है।

मुझे लगता है कि काम करने वाले स्लग कैसे प्राप्त करें इसका वर्णन करने में मददगार होगा।

व्यापक रूप से बोलते हुए, यदि आप #to_param ओवरराइड करते हैं, तो आईडी अब काम नहीं करती है। इसका मतलब है, कि यदि आप स्लग के साथ जाते हैं, तो हर बार पॉलिमॉर्पिक यूआरएल उत्पन्न होता है (उदाहरण के लिए, link_to object, object), यह_परम के मूल्य को पास करता है। यह ध्यान देने योग्य है कि आपको अपने नियंत्रक को भी बदलना होगा।

निजी तौर पर मुझे लगता है कि सबसे अच्छा तरीका है आसानी से मल उत्पन्न करने के लिए तकनीकी-weenie के permalink_fu, अपने मॉडल में has_permalink जोड़ने, और फिर, to_param ओवरराइड उपयोग करने के लिए है। उदाहरण

class Auction < ActiveRecord::Base 
    has_permalink :title, :slug 
end 

मानते हुए कि आपके स्लग, एक स्ट्रिंग क्षेत्र है, और अपने शीर्षक slugize करना चाहते हैं उसके लिए। तब

class AuctionsController < ApplicationController 
    def show 
    @auction = Auction.find_by_slug(params[:id]) || raise(ActiveRecord::RecordNotFound) 

    respond_to do |format| 
     format.html # show.html.erb 
    end 
end 

, आप मार्गों उत्पन्न कर सकते हैं विचारों में,, इस तरह से:

आप भी अपने नियंत्रक समायोजित करने की आवश्यकता

link_to @action, @action 

वैसे, आप अपने कार्यों नहीं सॉर्ट चाहिए दृश्य में। named_scope का उपयोग करने का सबसे अच्छा तरीका है।

+3

आप 'find_by_slug!' का उपयोग कर सकते हैं जो तब तक अपवाद उठाता है जब तक कि –

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