我应该在哪里存储在同一控制器中共同使用的变量?

时间:2013-01-10 10:41:30

标签: ruby-on-rails ruby-on-rails-3

现在我就是这样做的。这应该是正常的吗? 或者还有其他方法可以用另一种方式做到这一点,这是更受欢迎的方式吗?

users_controller.rb

before_filter :set_variable

def set_variable
    @number_of_records_to_display = 10  
    @number_of_tags_to_display = 10 
end

def index
...
        @users = User.find_by_username(params[:id]).all_following(order: 'updated_at DESC')
        @users = Kaminari.paginate_array(@users).page(params[:page]).per(@number_of_records_to_display)
        @tags = User.tag_counts_on(:tags, :limit => @number_of_tags_to_display, :order => "id desc")
...
end

2 个答案:

答案 0 :(得分:2)

你正在做的是正确和恰当的,因为你可能只使用某些动作而不是所有动作,所以你只能使用带有before_filter的子句

before_filter your_method,仅限:[:show,:index]

但您也可以使用初始化程序,或在环境文件中定义常量。如果您需要代码或更多帮助,请告诉我。

如果使用初始化程序,您可以在一个文件中定义常量,例如constants.rb并将其放在config / initializers文件夹中,该文件中只有 PAGE_SIZE = 10 TAG_COUNT = 10,

一旦你启动应用程序,这个常量将在你的应用程序的任何地方都可用。

答案 1 :(得分:2)

无需定义方法,您可以将其定义为控制器的常量

NUMBER_OF_RECORD_DISPLAY = 10
NUMBER_OF_TAGS_DISPLAY = 10

def index
...
        @users = User.find_by_username(params[:id]).all_following(order: 'updated_at DESC')
        @users = Kaminari.paginate_array(@users).page(params[:page]).per(NUMBER_OF_RECORD_DISPLAY)
        @tags = User.tag_counts_on(:tags, :limit => NUMBER_OF_TAGS_DISPLAY, :order => "id desc")
...
end