【问题标题】:Different set of Views for different user's roles不同用户角色的不同视图集
【发布时间】:2011-03-10 13:57:09
【问题描述】:

我正在开发一个 Rails 应用,我有 2 个不同的用户角色:高级和基本。

我不想在基本用户视图中隐藏链接(即使用 CanCan ),我想管理 2 组不同的视图:一个用于高级用户,一个用于基本用户。

目前我是这样工作的:

 case current_operator.op_type
      when 'basic'
        format.html { render :template => "devices/index_basc.html.erb" }
      when 'advanced'
        format.html # index.html.erb
 end

但我不喜欢在每个操作中为基本用户指定模板({ render :template => "devices/index_basc.html.erb" }) 我认为还有其他方法(我希望更整洁:)

你有什么想法吗?

谢谢你, 亚历山德罗

【问题讨论】:

    标签: ruby-on-rails web-applications cancan


    【解决方案1】:

    你可以在这个RailscastMobile Devices

    config/initializers/mime_types.rb 中添加:

    Mime::Type.register_alias "text/html", :basic 
    

    app/controllers/application_controller.rb 中添加:

    before_filter :check_user_status
    private
    def check_user_status
      request.format = :basic if current_operator.op_type == 'basic'
    end
    

    现在您可以在控制器中执行以下操作:

    class SomeController < ApplicationController
      def index
        # …
        respond_to do |format|
          format.html  # index.html.erb
          format.basic # index.basic.erb
        end
      end
    end
    

    【讨论】:

    • Mime::Type.register_alias "text/html", :basic 是 html 的别名,但是这样你可以根据用户的类型拥有两个不同的模板
    • 投反对票是为了什么?很高兴知道我做错了什么来纠正它。
    • 我认为这是一个很好的 hack,但我不知道这是否是“最佳实践”,因为 MIME 通常用于不同的目的。 (我投票赞成你的回应)
    • 发送到浏览器的mime类型还是text/html,只是一个rails内部别名。
    • 这种方法的唯一问题是它希望所有模板(包括部分模板等)都符合指定的 mime 类型。因此,如果我想加载 index.basic.erb,它将无法加载渲染的部分 _partial.html.erb。有什么解决方法吗?
    【解决方案2】:

    由于您只有两个不同的用户角色,您可以这样做

    page = (current_operator.op_type =='basic')?  "devices/index_basc.html.erb"  : "index.html.erb"
    format.html { render :template => page}
    

    【讨论】:

    • 但他仍然需要在每一个动作中都这样做。他说:“但我不喜欢在每个操作中为基本用户指定模板 ({ render :template => "devices/index_basc.html.erb" })”
    猜你喜欢
    • 2022-01-13
    • 2015-04-02
    • 1970-01-01
    • 1970-01-01
    • 2021-10-26
    • 2016-01-16
    • 2018-05-16
    • 2014-04-04
    • 1970-01-01
    相关资源
    最近更新 更多