2012-02-02 74 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