【问题标题】:How to add views for custom member action in active admin?如何在活动管理员中为自定义成员操作添加视图?
【发布时间】:2014-12-15 08:03:16
【问题描述】:

我必须为作为成员操作的自定义操作添加视图,并希望在其上显示关联记录。有没有办法添加自定义视图,而不仅仅是在管理员的视图文件夹中添加 html.erb?

我不想添加或创建 html 文件,而是使用活跃的管理员助手。

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-4 activeadmin


    【解决方案1】:

    成员动作与控制器动作完全不同,这意味着您可以在其中执行相同的操作。

    你可以使用这样的想法:

    render text: "Hello world!"
    

    或者如果你想要一个复杂的标记:

    message1 = "Hello"
    @message2 = "world!"
    view = Arbre::Context.new(message: message, self) do
      h1 do
        span message
        span @message
      end
    end
    render body: view.to_html # or .to_s
    

    【讨论】:

    • 它不显示 html 而是作为标签,并且没有活动的管理员布局
    • 知道了,render text: view.to_s, layout: "layouts/active_admin" 工作
    • 上述代码有问题,无法使用 table_for 或 paginated_collection 等。为 #<:views::tablefor> 获取未定义的方法 `cycle'
    【解决方案2】:

    您可以使用以下代码为 rails 4.1 渲染 html:

    render html: '<html><body>Some body text</body></html>'.html_safe ## Add html_safe
    

    但是,如果你使用 rails 4.2,那么你可以使用以下:

    render text: '<html><body>Some body text</body></html>'
    

    我认为以下answer 对您的问题非常有用。

    【讨论】:

      【解决方案3】:

      最后在 admin/user/messages.html.erb 的 html.erb 文件中添加以下内容

      <% view = Arbre::Context.new({messages: @messages, user: @user}, self) do
      
            panel "Sent Messages" do
              paginated_collection(messages, download_links: false) do
                table_for collection do
                  column :id
                  column :content            
                end
              end
            end
          end
      %>
      
      <%= view.to_s %>
      

      【讨论】:

        【解决方案4】:

        根据您的命名空间(ActiveAdmin 在我的例子中是 /admin),您可以像在应用程序的其余部分中一样创建文件夹 app/views/admin

        例如,如果您有一个资源User 和一个操作apply_discount

        ActiveAdmin.register User do
          member_action :apply_discount, method: [:get, :put] do
            if request.get?
              render :apply_discount
            else
              # TODO ...
            end
          end    
        end
        

        您可以将您的 ARBRE 视图文件放入 app/views/admin/users/apply_discount.html.arb -> 注意扩展名是 ARB,而不是 ERB - 尽管 ERB 也应该可以工作 according to the docs

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-11-27
          • 1970-01-01
          • 1970-01-01
          • 2023-03-18
          • 1970-01-01
          相关资源
          最近更新 更多