我有一个rails控制器,每个动作对每个动作都有相同的respond_to块,例如:
def some_action
respond_to do |format|
format.html { redirect_to :back }
format.js { render layout: false }
end
end
有没有办法可以将其设置为所有操作的默认响应?我知道我可以使用
respond_to :html, :js
位于控制器的顶部,但是这可以用于设置每种格式的特定响应吗?
答案 0 :(得分:1)
通过respond_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
答案 1 :(得分:0)
如果您希望所有操作都完全相同,请将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
这会干掉你的控制器,我认为这是个问题。