如何在控制器中设置变量,在其他 class 中可用?
How to make a variable set in controller, available in other class?
在我的控制器中我有:
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:
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
,在 class 中它应该显示列 :abc
取决于 @show_column
是真还是假。这是错误的,因为 @show_column
是一个实例变量并且在网格 class 中不可用。所以它是零。我应该如何更改它才能使其正常工作?
您可以在创建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:
class UsersGrid
def initialize(*params, show_column)
super *params
@show_column = show_column
end
# ...
end
对于不是 table.
列的变量,您可以使用 attr_accessor
def index
params[:users_grid][:show_column] = (current_user && current_users.admin?)
@grid = UsersGrid.new(params[:users_grid]) do |scope|
scope.where(admin: false).page(params[:page]).per_page(30)
end
@grid.assets
end
class UsersGrid
include Datagrid
scope do
User.order("users.created_at desc")
end
attr_accessor :show_column
column(:abc, :header => "abc?", :html => true, :if => proc {self.show_column == true}) do |user|
image_tag("abc.png", title: "abc") if user.abc
end
end
在我的控制器中我有:
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:
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
,在 class 中它应该显示列 :abc
取决于 @show_column
是真还是假。这是错误的,因为 @show_column
是一个实例变量并且在网格 class 中不可用。所以它是零。我应该如何更改它才能使其正常工作?
您可以在创建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:
class UsersGrid
def initialize(*params, show_column)
super *params
@show_column = show_column
end
# ...
end
对于不是 table.
列的变量,您可以使用 attr_accessordef index
params[:users_grid][:show_column] = (current_user && current_users.admin?)
@grid = UsersGrid.new(params[:users_grid]) do |scope|
scope.where(admin: false).page(params[:page]).per_page(30)
end
@grid.assets
end
class UsersGrid
include Datagrid
scope do
User.order("users.created_at desc")
end
attr_accessor :show_column
column(:abc, :header => "abc?", :html => true, :if => proc {self.show_column == true}) do |user|
image_tag("abc.png", title: "abc") if user.abc
end
end