ruby on rails - القضبان: response_to JSON و HTML




ruby-on-rails ruby-on-rails-4 (2)

أفضل طريقة للقيام بذلك هي مثلما قال Amitkumar Jha ، ولكن إذا كنت بحاجة إلى طريقة بسيطة وسريعة لتقديم الأشياء الخاصة بك ، يمكنك أيضًا استخدام هذا "الاختصار":

def index
  @users = User.all
  respond_to :html, :json, :xml
end

أو اجعل respond_to يعمل لجميع الإجراءات في وحدة التحكم باستخدام response_with:

class UserController < ApplicationController
  respond_to :html, :json, :xml

  def index
    @users = User.all
    respond_with(@users)
  end
end

بدءا من الإصدار Rails 4.2 ، ستحتاج إلى استخدام gem responder الاحجارى لتكون قادرة على استخدام response_with.

إذا كنت بحاجة إلى مزيد من التحكم وتريد أن تكون قادرًا على اتخاذ بعض الإجراءات التي تعمل بشكل مختلف ، فاستخدم دائمًا block_to كاملًا. يمكنك قراءة المزيد here .

لدي جهاز تحكم "UserController" الذي يجب أن يستجيب لطلبات ajax العادية و http://localhost:3000/user/3 .

عندما يكون الطلب عاديًا ، أريد عرض وجهة نظري. عندما يكون طلب AJAX ، أريد إرجاع JSON.

يبدو أن المنهج الصحيح هو صيغة respond_to do |format| منع. كتابة JSON أمر سهل ، ولكن كيف يمكنني الحصول عليه للرد على HTML وبساطة جعل العرض كالمعتاد؟

  def show
    @user = User.find(params[:id])
    respond_to do |format|
      format.html {
        render :show ????this seems unnecessary. Can it be eliminated??? 
      }
      format.json { 
        render json: @user
      }
    end
  end

حسب معرفتي ، ليس من الضروري "تقديم العرض" في format.html سيبحث تلقائيًا عن عرض الإجراء المناسب لـ ex: show.html.erb لطلب HTML وعرضه ، js ، erb لطلب JS.

لذلك هذا سوف يعمل

respond_to do |format|

  format.html # show.html.erb
  format.json { render json: @user }

 end

أيضا ، يمكنك التحقق من الطلب هو اياكس أم لا عن طريق فحص request.xhr؟ تقوم بإرجاع true إذا كان الطلب واحد ajax.





respond-to