Rails 5.2-无法从response_to块

时间:2018-08-22 18:04:54

标签: ruby-on-rails ruby

我的应用程序控制器中有此方法,该方法为相应的用户类型呈现视图模板。

class ApplicationController < ActionController::Base
  def render_for_user
    view = caller_locations.first.label
    if current_user.blank?
      render "#{view}_guest"
    else
      render "#{view}_#{current_user.role.downcase}"
    end
  end
end

我以以下方式调用此方法:

Class CommentController < ActionController::Base
  def show
    @comment = Comment.find(params[:id])
    render_for_user
  end
end

我遇到麻烦的地方是从respond_to块内部调用此方法。这是一个示例:

Class CommentController < ActionController::Base
  def show
    @comment = Comment.find(params[:id])
    respond_to do |format|
      format.js
      format.html { render_for_user }
    end
  end
end

由于应用程序控制器中的控制器方法只是将调用方法的名称向上一级获取,因此它被response_to块击败了。

我的问题是:查看上面的代码,是否有更好,更灵活的方法来获取调用控制器方法?

1 个答案:

答案 0 :(得分:3)

  

我的问题是:查看上面的代码,是否有更好,更灵活的方法来获取调用控制器方法?

controller_name将返回name.demodulize.sub(/Controller$/, '').underscore,这可能是您想要的。我从未见过有人需要使用caller_location。同样,有action_name

还有params[:controller]params[:action]