2012-11-12 20 views
5

Denetleyicimde latest eylem var. Bu işlem sadece son kaydı yakalar ve show şablonunu oluşturur.Raylar 3 respons_with özel şablonla

class PicturesController < ApplicationController 
    respond_to :html, :json, :xml 

    def latest 
    @picture = Picture.last 

    respond_with @picture, template: 'pictures/show' 
    end 
end 

Şablon sunmanın daha temiz bir yolu var mı? Bu, HTML denetleyicisi için bölümünü sağlamak zorunda kalıyor çünkü bu site denetleyicisidir. Eğer işlemek istediğiniz şablon, aynı denetleyiciye aitse

cevap

7

, sadece bu gibi yazabilirsiniz:

class PicturesController < ApplicationController 
    def latest 
    @picture = Picture.last 

    render :show 
    end 
end 

Bu resim/yol gerekli değildir. Ben @Dario Barrionuevo bu benzer yaptık

class PicturesController < ApplicationController 
    def latest 
    @picture = Picture.last 

    respond_to do |format| 
     format.html {render :show} 
     format.json {render json: @picture} 
     format.xml {render xml: @picture} 
    end 

    end 
end 
+2

** Bu doğru cevaptır. ** Bir Gotcha değerinde: '' render 'show' 'çağırmak * sadece show şablonunu * render eder, show eylemini çağırmaz. Dolayısıyla, şov şablonunun ihtiyaç duyduğu "şov" eyleminizde örnek değişkenler varsa, bunları "en son" işleminizde veya "şov" şablonunu oluşturan başka bir eylemde de ayarlamanız gerekir. – Andrew

+0

Güncellemelerime göz atın. Bu işlem için "API gezinme" özelliğini korumam gerekiyor (JSON ve XML biçimleri). Biliyorum 'response_with' bir blok ve' format.html {render: show} 'yapmak. Bu da olması gerektiği kadar temiz değil gibi görünüyor. – mikeycgto

+0

Özel bir şablon için bunu nasıl yaparsınız, zaten kalan eylemlerin bir parçası değil mi? Paylaşılan bir klasördeki özel şablona ne dersiniz? – ahnbizcad

5

ama XML & korumak için gerekli: Eğer xml ve json biçimlerini korumak gerekiyorsa Layouts and Rendering in Rails

, yapabileceğiniz: Burada derine gidebilir JSON formatları ve respond_to blok yapmaktan mutlu değildim, çünkü respond_with yanıtlayıcılarını kullanmaya çalışıyorum. Bunu yapabileceğini ortaya çıkarır. JSON & XML için arzu edildiği gibi

class PicturesController < ApplicationController 
    respond_to :html, :json, :xml 

    def latest 
    @picture = Picture.last 

    respond_with(@picture) do |format| 
     format.html { render :show } 
    end 
    end 
end 

varsayılan davranış çalışacaktır. Her üçü yerine yalnızca geçersiz kılmanız gereken (HTML yanıtı) bir davranış belirtmeniz gerekir.

Source is here.