2015-05-27 41 views
0

在我的控制,我有:如何在控制器中設置變量集,在其他類中可用?

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 

所以在控制器我設置​​,並在課堂上應該顯示列:abc取決於​​是否對或錯。這是錯誤的,因爲​​是一個實例變量,並且在網格類中不可用。所以它是零。我應該如何改變這個工作?

+0

@show_column必須參數Grid類 – Kamesh

+0

您可以通過使用會話 例如試試這個在控制器'session [:show_column] = true'而不是@show_column = true,並且在模型中:if => proc {session [:show_column] == true}'而不是:if => proc {@show_column == true } –

+0

你不應該演變這樣的問題。它使現有的答案無效。改爲提出另一個問題。 –

回答

1

您可以在創建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 
+0

我初步認爲這工作,但它沒有。 '@ show_column'在網格類中仍然是零(我知道這一點,因爲它只顯示了列,如果我使用'proc {@show_column == nil}'。 – Nick

+0

我也在控制器中用'@show_column = true' 。但是然後'@ show_column'在類中是零,並且它只顯示了我使用'proc {@show_column == nil}'的列,所以它似乎沒有正確地將'@ show_column'值傳遞給網格類 – Nick

+0

@Nick:在你的UsersGrid類中添加'attr_reader:show_column',然後使用它:'proc {show_column == true}'它應該可以工作 – Surya

1

您可以使用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 
+0

這提供了一個錯誤消息'nil:NilClass'參考行'params [:users_grid] [:show_column] =(current_user && current_users.admin?)''undefined method' [] ='' – Nick

+0

is params [:users_grid]零? –

+0

我這樣想,'undefined method'[] ='for nil:NilClass'我認爲是指'[:show_column]'。我很確定它沒有引用'(current_user && current_users.admin?)',因爲它們也在其他視圖中使用,並且在那裏正常運行。 – Nick

相關問題