3

Ruby1.9.3p194のRails3.2.8では、gemに含まれるモジュールrespond_toのメソッドを呼び出すことによってクラス定義にオンデマンドで含まれるActiveSupport :: Concernに配列を渡すと、次のようになります。acts_as_...

respond_to causes undefined method `to_sym' for [:json, :html]:Array

そして次のリクエストで、私は次のようになります。

RuntimeError (In order to use respond_with, first you need to declare the formats your controller responds to in the class level):
  actionpack (3.2.8) lib/action_controller/metal/mime_responds.rb:234:in `respond_with'

モジュールコードでは、次と同等のことを行っています。

formats = [:json, :html]
respond_to formats

フォーマットが他の場所で構成されているため、を指定するすべてのコントローラーに適用できますacts_as_...

クラス定義でこれを行うと、それが機能することを私は知っています:

respond_to :json, :html

では、フォーマットの配列である変数を使用してrespond_toを呼び出すにはどうすればよいですか?

4

1 に答える 1

3

respond_toRails3.2.8のメソッドの関連部分は次のとおりです。

def respond_to(*mimes)
  # ...
  mimes.each do |mime|
    mime = mime.to_sym
    # ...
  end
  # ...
end

でsplat演算子が使用されているためrespond_to、着信配列を配列でラップしているため、mimesは[[:json, :html]]であり、配列を呼び出そうとしていますto_sym

respond_to配列を含む変数を使用して呼び出す場合は、splat(*)演算子を使用する必要があります。例:

formats = [:json, :html]
respond_to *formats

respond_toこれは、2つの引数を送信しているかのように呼び出されます。

respond_to :json, :html

また:

respond_to(:json, :html)
于 2012-10-30T18:05:48.587 に答える