Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails RoR-两个对使用相同块的格式进行响应?_Ruby On Rails - Fatal编程技术网

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的同义词,如果这对您更有意义的话。