簡體   English   中英

Rails 4 Ajax控制器的默認response_to

[英]Rails 4 default respond_to for ajax controller

我有一個Rails控制器,其中每個動作對每個動作都有相同的response_to塊,例如:

def some_action
  respond_to do |format|
    format.html { redirect_to :back }
    format.js   { render layout: false }
  end
end 

有沒有一種方法可以將其設置為所有操作的默認響應? 我知道我可以用

respond_to :html, :js

在控制器的頂部,但是可以用於設置每種格式的特定響應嗎?

通過response_withrespond_to文檔和源代碼。 你可以

使用respond_to

def create
  @user = User.new(params[:user])
  respond_to do |format|
    if @user.save
      flash[:notice] = 'User was successfully created.'
      format.html { redirect_to(@user) }
      format.xml { render xml: @user }
    else
      format.html { render action: "new" }
      format.xml { render xml: @user }
    end
  end
end

OR respond_with

respond_to :html, :xml

def create
  @user = User.new(params[:user])
  flash[:notice] = 'User was successfully created.' if @user.save
  respond_with(@user)
end

解決方法是創建您自己的自定義respond方法,或手動檢查mime類型,如下所示:

****注意:這是非常糟糕的做法,我建議您遵守約定。

def some_action
  render json: {"a" => "s"} if request.format.json? 
  render :some_action if request.format.html? 
end

如果您希望所有操作都完全相同地響應,請將respond_to塊移至方法中。

def some_action
  # do things
  respond
end 

def another_action
  # do more things
  respond
end

def special_action
  # do special things
  respond
end

private

def respond
  respond_to do |format|
    format.html { redirect_to :back }
    format.js   { render layout: false }
  end
end

這會使您的控制器變干,我認為這是個問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM