0

これはインターネットからのコードであり、response_to、format.html、format.jsがコントローラーで何をするのか理解するのに苦労しています。

def create
 @review = Review.create!(params[:review])
 flash[:notice] = "Thank you for reviewing this product"
  respond_to do |format|
   format.html { redirect_to @review.product }
   format.js
 end
end

お時間をいただきありがとうございます。

ラミヤ

4

1 に答える 1

0

Respond_to(*types, &block) public Web サービスのサポートがない場合、人のリストを表示するためのデータを収集するアクションは次のようになります。

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

これは同じアクションで、Web サービスのサポートが組み込まれています。

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

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

つまり、「クライアントがこのアクションへの応答として HTML を必要とする場合は、以前と同じように応答しますが、クライアントが XML を必要とする場合は、人々のリストを XML 形式で返します」ということです。(Rails は、クライアントから送信された HTTP Accept ヘッダーから目的の応答形式を決定します。)

Web サービスを使用せずに、新しい人物を追加し、必要に応じて (名前で) 会社がまだ存在しない場合は作成するアクションがあると仮定すると、次のようになります。

  def create
    @company = Company.find_or_create_by_name(params[:company][:name])
    @person  = @company.people.create(params[:person])

    redirect_to(person_list_url)
  end

これは同じアクションで、Web サービスのサポートが組み込まれています。

  def create
    company  = params[:person].delete(:company)
    @company = Company.find_or_create_by_name(company[:name])
    @person  = @company.people.create(params[:person])

    respond_to do |format|
      format.html { redirect_to(person_list_url) }
      format.js
      format.xml  { render :xml => @person.to_xml(:include => @company) }
    end
  end

クライアントが HTML を必要とする場合は、ユーザー リストにリダイレクトするだけです。Javascript (format.js) が必要な場合、それは RJS 要求であり、このアクションに関連付けられた RJS テンプレートをレンダリングします。最後に、クライアントが XML を必要とする場合、作成された人物を XML としてレンダリングしますが、ひねりを加えて、レンダリングされた XML に人物の会社も含めるため、次のようになります。

http://apidock.com/rails/ActionController/MimeResponds/InstanceMethods/respond_to

于 2013-03-05T06:21:49.303 に答える