Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails 4对ajax控制器的默认响应_Ruby On Rails - Fatal编程技术网

Ruby on rails Rails 4对ajax控制器的默认响应

Ruby on rails Rails 4对ajax控制器的默认响应,ruby-on-rails,Ruby On Rails,我有一个rails控制器,其中每个动作都有相同的respond_来阻止每个动作,例如: def some_action respond_to do |format| format.html { redirect_to :back } format.js { render layout: false } end end 有没有办法将其设置为所有操作的默认响应?我知道我可以用 respond_to :html, :js 在控制器的顶部,但这可以用于设置每种格式的特定

我有一个rails控制器,其中每个动作都有相同的respond_来阻止每个动作,例如:

def some_action
  respond_to do |format|
    format.html { redirect_to :back }
    format.js   { render layout: false }
  end
end 
有没有办法将其设置为所有操作的默认响应?我知道我可以用

respond_to :html, :js
在控制器的顶部,但这可以用于设置每种格式的特定响应吗?

浏览文档和源代码。你也可以

使用
响应

或用
解决方法是创建自己的自定义
respond
方法,或手动检查
mime
类型,如下所示:

****注意:这是一个非常糟糕的做法,我建议坚持惯例。
如果希望所有操作的响应完全相同,请将
respond\u 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

这会使你的控制器干涸,我想这就是问题所在。

这就是我所做的,我只是想知道是否有一种更干涸的方式,在每次操作中不需要相同的调用。
respond_to :html, :xml

def create
  @user = User.new(params[:user])
  flash[:notice] = 'User was successfully created.' if @user.save
  respond_with(@user)
end
def some_action
  render json: {"a" => "s"} if request.format.json? 
  render :some_action if request.format.html? 
end
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