繁体   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