Ruby on rails RoR-两个对使用相同块的格式进行响应?
是否有类似于:Ruby on rails RoR-两个对使用相同块的格式进行响应?,ruby-on-rails,Ruby On Rails,是否有类似于: respond_to do |format| format.html || format.xml do #big chunk of code end end 为了干燥,我想这样做。当你 respond_to do |format| format.html do #block end format.xml do #block end end 还是你 respond_to do |format| format.html {
respond_to do |format|
format.html || format.xml do
#big chunk of code
end
end
为了干燥,我想这样做。当你
respond_to do |format|
format.html do
#block
end
format.xml do
#block
end
end
还是你
respond_to do |format|
format.html { #block }
format.xml { #block }
end
您正在利用,它被评估为进程。所以你可以
respond_to do |format|
bcoc = Proc.new do
# your big chunk of code here
end
format.html bcoc
format.xml bcoc
end
但也许您可以将其中一些逻辑移到数据结构中?您可以使用如下格式:
class PeopleController < ApplicationController
respond_to :html, :xml, :js
def index
@people = Person.find(:all)
respond_with(@people) do |format|
format.html
format.xml
format.js { @people.custom_code_here }
end
end
end
class PeopleController
如果你有更复杂的情况,请告诉我,这将实现你所寻找的。有关更多帮助,请参阅此方法。Respond\u实际上允许您使用以下任一选项为不同格式指定公共块:
format.any(:js, :json) { #your_block }
那么,您希望块返回什么格式—html还是xml?你可以把所有的逻辑放在respond_to之外,然后在最后将其格式化为html/xml-这有帮助吗?请参阅使用format获得更好的答案。任何(:html,:xml){…}请原谅我一直以来的回答,问题是:我想format.html和format.xml共享同一组代码,但我也有format.js,我不想让它访问format.html或format.xml的代码(在本例中是相同的)。使用上面代码的修改版本。如果您有任何问题,请告诉我.Ty Alex,我将使用此解决方案,因为我可以限制format.js访问format.html/xml的代码。Ruby块不是进程。它们可以来回转换,但它们不是同一件事。@MatthewRatzloff我的理解是块语法正是:定义闭包最常见的ruby语法。看见那是什么呢?很高兴被纠正。@AlexanderWenzowski有很多错误信息。符号和一元运算符将块转换为Proc,这就是它将自身报告为Proc的原因。块与过程不同,但可以轻松地来回转换。过程实际上是从块创建的;块只是一种重量较轻的构造。差异很小,但它们有不同的名称是有原因的。:-)事实上,我认为这是唯一真正有用的答案。我无法运行“Proc”答案,而这个答案显然更短更干净。Tks!另外,
format.all
是format.any的同义词,如果这对您更有意义的话。