这是来自互联网的代码,我无法理解控制器中的respond_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
感谢您的时间。
拉姆亚
答案 0 :(得分: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