0

这是来自互联网的代码,我无法理解 response_to、format.html 和 format.js 在控制器中的作用。

def create
 @review = Review.create!(params[:review])
 flash[:notice] = "Thank you for reviewing this product"
  respond_to do |format|
   format.html { redirect_to @review.product }
   format.js
 end
end

感谢您的时间。

拉姆亚

4

1 回答 1

0

respond_to(*types, &block) public 如果没有 Web 服务支持,收集数据以显示人员列表的操作可能如下所示:

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

这是相同的操作,其中包含 Web 服务支持:

  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 标头确定所需的响应格式。)

假设您有一个添加新人的操作,如果该公司尚不存在,则可以选择创建他们的公司(按名称),没有 Web 服务,它可能如下所示:

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

    redirect_to(person_list_url)
  end

这是相同的操作,其中包含 Web 服务支持:

  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

如果客户端需要 HTML,我们只需将它们重定向回人员列表。如果他们想要 Javascript (format.js),那么这是一个 RJS 请求,我们渲染与此操作关联的 RJS 模板。最后,如果客户需要 XML,我们将创建的人员呈现为 XML,但有一点不同:我们还在呈现的 XML 中包含了该人的公司,因此您会得到如下内容:

http://apidock.com/rails/ActionController/MimeResponds/InstanceMethods/respond_to

于 2013-03-05T06:21:49.303 回答