可能重复:
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是一种采取行动的方法。这两种格式看起来也可能是方法调用,但我不知道。
答案 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