[英]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_with和respond_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
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.