如何在ActiveAdmin视图中使用控制器中定义的实例变量?

jfe*_*ick 7 ruby-on-rails activeadmin

我有这个:

ActiveAdmin.register User do
  controller do
    def show
      @user = User.find(params[:id])
      show! 
    end
  end

  show do
    attributes_table do
      row "User" do
        link_to @user.display_name, user_path(@user.slug) 
      end
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

但是当我加载页面时,我收到一条错误消息:

undefined method `display_name' for nil:NilClass
Run Code Online (Sandbox Code Playgroud)

这意味着@user是零.我很肯定@user被正确设置(意味着查找器正在获取数据库中存在的适当数据).我认为它与ActiveAdmin的工作原理有关,我不熟悉.有什么想法吗?

此外,我知道我可以这样做show do |user|,但是我使用它有更复杂的东西,需要访问控制器中的用户对象.

wpp*_*wpp 27

以防万一其他人偶然发现:

controller.instance_variable_get(:@user)
Run Code Online (Sandbox Code Playgroud)

也应该工作.

  • 这应该标记为正确的答案 (2认同)
  • 我不知道`控制器`是AA中的东西.这解决了我所有的问题,谢谢! (2认同)
  • 完美,有所作为!我不知道为什么我的@users变量在AA索引函数中为零,但使用这意味着它突然有了我需要的值并且在之前的索引过滤器中设置了.生活更安全!谢谢 (2认同)

Jie*_*rat 6

在主动管理员中有控制器,尽管如此,你无法将实例变量传递给arbre部分.但你可以使用params哈希:

ActiveAdmin.register User do
  controller do
    def show
      params[:user] = User.find(params[:id])
      show! 
    end
  end

  show do
    attributes_table do
      row "User" do
        link_to params[:user].display_name, user_path(params[:user].slug) 
      end
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

PS:如果您不想更改params,则存储所有实例变量@arbre_context.assigns.您可能也喜欢:

link_to @arbre_context.assigns[:user].display_name, user_path(@arbre_context.assigns[:user].slug) 
Run Code Online (Sandbox Code Playgroud)


Edm*_*Lee 6

实例变量被定义为辅助方法。如果您在控制器中定义了该定义,则可以访问它。或者,您可以简单地调用resource,它将引用活动记录对象。

ActiveAdmin.register User do
  controller do
    def show
      @user = User.find(params[:id])
      show! 
    end
  end

  show do
    attributes_table do
      row "User" do
        # note that your have access to `user` as a method.
        link_to user.display_name, user_path(user.slug) 
      end
    end
  end
end
Run Code Online (Sandbox Code Playgroud)


den*_*lin 1

在 activeadmin 中似乎不起作用。“form”块内唯一可用的实例变量是@config。

解决此问题的最佳方法是使用部分内容,如“自定义表单”中所述

http://activeadmin.info/docs/5-forms.html