respond_toとrespond_to?の違い

respond_to?とは・・・

respond_to?は、クラスに特定のメソッドがあるかどうかを検出するための Rubyメソッド である。

@user.respond_to?('eat_food')

Userクラスにeat_foodメソッドがある場合、trueを返す。戻り値はbooleanである。ここでメソッドとは「def run」のように定義したものだけではなく「@user.name」「@article.title」のようにそのオブジェクトが持つカラムがあるかどうかを判断するのにも使える。


name = if respond_to?(:video_title)
             :video_title
           elsif respond_to?(:video_name)
             :video_name
           end

ここでは、オブジェクトがvideo_titleメソッドを持てばvideo_titleの値を返し、それをnameに入れる。またvideo_nameメソッドを持てばvideo_nameの値を返して、nameに代入する。異なるカラムやメソッドを持つ複数種類のオブジェクトを一つのメソッドで処理する時にrespond_to?は使えるだろう。


respond_toとは・・・

respond_toは、特定の要求タイプに応答するための Railsメソッド である。

respond_to do |format|
      if @tweet.destroy
         format.html { redirect_to root_path }
         #root_pathへリダイレクトする
         format.js { render :action => "index" }
         #.index.html.erbで作成されたものをjson形式で表示する。
      end
end 

例えば上だと、formatがhtmlで指定されていたらroot_pathにリダイレクト、jsonで指定されていたらindex.html.erbをindex.html.jsで返す。