了解Ruby语法

时间:2010-09-14 21:17:54

标签: ruby-on-rails ruby syntax

  

可能重复:
  What is the best way to learn Ruby?
  Explain Iterator Syntax on Ruby on Rails

我还在学习红宝石,红宝石等等。我越来越了解所有的ruby和rails语法,但这个让我有些难过。

respond_to do |format|
  format.html # index.html.erb
  format.xml  { render :xml => @contact_lists }
end
我认为,

respond_to是一种采取行动的方法。这两种格式看起来也可能是方法调用,但我不知道。

3 个答案:

答案 0 :(得分:6)

respond_to是一种采用阻止的方法。该块接受一个参数,此处称为format

现在你在format上调用两个方法。你没有参数调用的html。和xml你用一个块调用。

此块不带参数,并包含对hash方法的调用。哈希包含键:xml和值@contact_lists

答案 1 :(得分:4)

是的,你是对的。

Ruby方法调用起初有点令人费解,因为你可以省略这个parethesis,它们可能会收到代码块。

所以,这就是解释:

respond_to do |format| 

调用方法respond_to并传递一个块,告诉它将接收的format

    format.html # index.html.erb

使用名为format的对象调用方法html

    format.xml  { render :xml => @contact_lists }

方法xml依次接收另一个块(do / en和{},是传递块的不同语法。)

end

完成第一个块

请参阅this other other 个答案。

答案 2 :(得分:3)

我认为this post可以帮到你。

另外,请花一点时间阅读respond_to documentation。 值得一提的是,此方法有changed in Rails 3

  

没有网络服务支持,就是一个动作   收集数据进行显示   人员名单可能看起来像什么   像这样:

def index
  @people = Person.find(:all)
end
     

这是同样的动作,有   网络服务支持烘焙:

def index
  @people = Person.find(:all)

  respond_to do |format|
    format.html
    format.xml { render :xml => @people.to_xml }
  end
end
     

这就是说,“如果是客户   想要HTML来响应这个动作,   就像我们以前一样回应,   但如果客户想要XML,请返回   他们是XML中的人员列表   格式。“(Rails确定所需的   来自HTTP Accept的响应格式   客户提交的标题。)

     

假设你有一个添加的动作   一个新人,可选择创建   他们的公司(按名称),如果没有   已经存在,没有网络服务,   它可能看起来像这样:

def create
  @company = Company.find_or_create_by_name(params[:company][:name])
  @person  = @company.people.create(params[:person])

  redirect_to(person_list_url)
end
     

这是同样的动作,有   网络服务支持烘焙:

def create
  company  = params[:person].delete(:company)
  @company = Company.find_or_create_by_name(company[:name])
  @person  = @company.people.create(params[:person])

  respond_to do |format|
    format.html { redirect_to(person_list_url) }
    format.js
    format.xml  { render :xml => @person.to_xml(:include => @company) }
  end
end