2012-02-02 105 views
0

我是一個新的紅寶石和rails。由rails生成的ruby源代碼

按照ror文檔中的指導,我創建了博客應用程序。

Howver當我看到生成的代碼,我發現我無法理解它們,exmpale:(?是不是)

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

    respond_to do |format| 
     format.html # show.html.erb 
     format.json { render json: @post } 
    end 
    end 

的repond_to是一種方法,和下面的塊是論據?

但是代碼塊內的代碼是什麼意思?

 format.html # show.html.erb 
     format.json { render json: @post } 

format.html是方法的名稱還是別的嗎?

{ render json: @post }>怎麼樣?

+0

你有沒有試過閱讀一些[文檔](http://apidock.com/rails/ActionController/MimeResponds/respond_to)? – 2012-02-02 13:32:11

+0

我不是指方法的功能,而是表達式。 – hguser 2012-02-02 13:38:58

+0

你需要一些基本的ruby教育,它會比其他任何東西更快地清除它。 http://mislav.uniqpath.com/poignant-guide/ – muffinista 2012-02-02 13:56:35

回答

1

respond_to方法可幫助您按請求的格式提供內容。例如,如果您調用/posts/1.json,則響應將是JSON文件。如果它是/posts/1.html,那麼響應將是一個HTML頁面。未提供擴展名時的默認值是呈現HTML。

format.json方法告訴Rails時請求延期做什麼,例如像,如果每一個JSON請求你想增加一個計數器,而不是HTML請求,你可以這樣做:

format.json { 
    counter = counter + 1 
    render json: @post 
} 

如果您沒有提供format.json方法的塊,Rails會自動嘗試在views/posts/的內部尋找show.json.erb文件,並對其進行渲染。在您提供的方法中,render json: @post告訴Rails立即渲染它,而不是查找文件。

+0

我知道這根據請求類型(json或html)呈現不同的結果,我只是無法理解這種語法。所以'格式'這裏是一個對象? 'format.json'是一個方法,'{xx}'是塊類型的參數?在塊內部,'render'是另一個方法名稱,'json:@ post'是參數? – hguser 2012-02-02 13:44:14

+0

好吧,你可以在那裏放置一些Rails.log.info,看看發生了什麼... – 2012-02-02 13:46:23

+0

@hguser,你對什麼是方法的假設以及在這種情況下的參數是正確的,如果這就是你所問的。 'render json:@ post'相當於'render({:json => @post})',如果這樣會讓事情變得更加清晰。 – 2012-02-02 13:52:34