1. ホーム
  2. ruby-on-rails

[解決済み] respond_to' と 'respond_to' で迷う?

2023-06-28 12:30:12

質問

私はrailstutorial.orgでRailsを学んでいるのですが、あることで混乱しています。 で この章 でコンソールでテストを行うよう指示されています。 respond_to? メソッドを使ってコンソールでテストをするよう著者に指示され、それはうまくいきました。しかし、後日、私たちが :encrypted_password 属性のテストでは、彼は respond_to .

好奇心で、私は respond_to をコンソールで試してみましたが、メソッドが存在しないというエラーが表示されました。しかし、もし私が respond_to? の代わりに respond_to に変更すると、テストは実行されません。

誰かこの違いを教えてください。また、なぜテストが respond_to ?

どのように解決するのですか?

Rubyの処理 ?! をメソッド名の実際の文字として使用することができます。 respond_torespond_to? は異なる。 ? は、この でなければなりません。 は真か偽で応答します (慣習によって。これは要求事項ではありません)。具体的には

respond_to? ルビー メソッド は、そのクラスが特定のメソッドを持っているかどうかを検出するためのものです。例えば

@user.respond_to?('eat_food')

は、もし User クラスが eat_food メソッドがあります。

respond_to Rails メソッド は、特定のリクエストタイプに応答するためのものです。例えば

def index
  @people = Person.find(:all)

  respond_to do |format|
    format.html
    format.xml { render :xml => @people.to_xml }
  end
end

しかし、提供されたRailsTutorialのリンク先では RSpec メソッド should は、RSpec の respond_to メソッドと対話します。を実行しない限り、これはコンソールでは利用できないでしょう。 rails console test .