2014-04-25 23 views
8

Özel bir Rack middleware nesnesinden Rails params hash değerine bir değer eklemeye çalışıyorum. Benim şu anki yaklaşımı Şu anda ActionDispatch :: ParamsParser sonra ortakatmanını ekliyorumAlter Rails params hash'den Rack middleware

class PortalResolver 

def initialize(app) 
    @app = app 
end 

    def call(env) 
    begin 
     url = "#{env['rack.url_scheme']}://#{env['HTTP_HOST']}" 
     request = Rack::Request.new(env) 
     portal_id = DomainService.domain(url) # DomainService is returning the expected value 
     request.params['portal_id'] = portal_id 
     status, headers, response = @app.call(env) 
     [status, headers, response] 
    rescue PortalNotFoundError => e 
     [403, {'Content-Type' => 'text/html'}, ['']] 
    end 
    end 
end 

kullanıyor. Parametreler Rails params karma bir denetleyiciden görünmüyor, ancak request.params hash (yukarıda tanımlanan middleware nesnesi içinde) göstermek yok. Herhangi bir fikir? Çok takdir yardımcı olur.

+1

böylece bir 'request' nesnesi oluşturan ancak o zaman onunla bir şey yapmayın: aşağı docs olarak update_param önermek Raf yığını kullanımı ayrıca yeni değer kullanılabilir hale getirmek için? Kontrol cihazında nasıl görünmesi gerekiyor? – phoet

cevap

13

docs for Rack::Request#params ki: modifikasyonlar env'deki kalıcı olmayacak

Not. Paramsleri yıkıcı olarak değiştirmek istiyorsanız update_param veya delete_param kullanın.

Eğer Raf :: Request bu örneği için oluşturulan karma yeni parametre eklemek hattını oluşturmak

request.params['portal_id'] = portal_id 

kullanmak

ama raylar geçirilir env değiştirilmez.

request.update_param('portal_id', portal_id) 
+1

İşte buydu! Dokümanların yakından okunmasının önemini kesinlikle güçlendirir. – silatham99