Object#respond_to? と Rails の respond_to
Object#respond_to と Rails の respond_to が混同してしまうので整理。
Object#respond_to?
オブジェクトがメソッド name を持つとき真を返します。
レシバーが第一引数に指定された名前のメソッドを持ってる(厳密には応答できる)場合は true が返る。
第2引数も bool を指定できるが、 これは private / protected メソッドを対象に含めるかどうか。(省略時は false = 含めない)
code:ruby
if user.respond_to?(:hello)
user.hello
else
puts "missing hello"
end
code:ruby
user.respond_to?(:hello, true) # => private, protected も対象
Rails の respond_to
リクエストで指定されたフォーマットに合わせて出力するための関数。
ActionController::MimeResponds に定義されている関数。
respond_to の中で 指定された mime-type に応じた処理の実行やレスポンスを返却することができる。
code:ruby
class UserController < ApplicationController
def create
@user = User.new(user_params)
respond_to do |format|
format.html { redirect_to user_url(@user), notice: "User was successfully created." }
format.json { render :show, status: :created, location: @user }
end
end
end