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で返す。