如何在控制器中创建变量集,在其他类中可用?

时间:2015-05-27 10:08:12

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

在我的控制器中我有:

  def index
    @grid = UsersGrid.new(params[:users_grid]) do |scope|
      scope.where(admin: false).page(params[:page]).per_page(30)
    end
    @grid.assets
    if (current_user && current_users.admin?)
      @show_column = true
    else
      @show_column = false
    end
  end

在我的网格课程中:

class UsersGrid

  include Datagrid
  scope do
    User.order("users.created_at desc")
  end

  column(:abc, :header => "abc?", :html => true, :if => proc {@show_column == true}) do |user|
    image_tag("abc.png", title: "abc") if user.abc
  end
end

所以在控制器中我设置了@show_column,并且在类中它应该显示列:abc,具体取决于@show_column是真还是假。这是错误的,因为@show_column是一个实例变量,在网格类中不可用。所以它没有。我应该如何更改此功能?

2 个答案:

答案 0 :(得分:0)

您可以在创建UsersGrid实例时传递变量,然后将其保存在实例变量中。

在控制器中:

def index
  @show_column = (current_user && current_users.admin?)
  @grid = UsersGrid.new(params[:users_grid], @show_column) do |scope|
    scope.where(admin: false).page(params[:page]).per_page(30)
  end
  @grid.assets
end

在网格类中:

class UsersGrid
  def initialize(*params, show_column)
    super *params
    @show_column = show_column
  end

  # ...
end

答案 1 :(得分:0)

您可以将 attr_accessor 用于不属于表格列的变量。

 <?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
  <HWData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <Header xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" version="1.0"/>
    <NE MOID="WBTS-4073" NEType="WBTS">
     <EQHO MOID="EQHO-1-0" serialNumber="V7124400225">
       <UNIT MOID="UNIT-FAN-2" State="enabled" serialNumber="V734"></UNIT>
       <UNIT MOID="UNIT-FAN-1" State="disabled" serialNumber="V735"></UNIT>
       <UNIT MOID="UNIT-FAN-3" State="enabled" serialNumber="V745"></UNIT>
     </EQHO>
    </NE>
  </HWData>