在控制器上放置常量的常量?

时间:2018-03-31 15:52:34

标签: ruby-on-rails ruby

您好我正在使用ruby-2.5.0和rails 5开发Ruby on Rails项目。我编写了一个api来检查散列中是否存在某些单词,如下所示: -

parser_controller.rb
# frozen_string_literal: true

class ParserController < ApplicationController
  def create
      search_words = ["Walmart","Optical","Anker"]
      if search_words.select{|w| parser_params.to_s.include?(w) }
        render json: {}, status: 200
      else
        render json: {}, status: 404
      end
    rescue StandardError
    render json: {}, status: 500
  end

  private

  def parser_params
    params.require(:data)
          .permit!
          .transform_keys(&:underscore)
  end
end

我想知道我应该在哪里放置这个数组search_words = [“Walmart”,“Optical”,“Anker”],因为它的大小可以增加。请帮我。谢谢你。

2 个答案:

答案 0 :(得分:2)

如果search_words仅在ParserController中使用,则将其设置为常量SEARCH_WORDS

class ParserController < ApplicationController
  SEARCH_WORDS = ["Walmart","Optical","Anker"]
  def create
      if SEARCH_WORDS.select{|w| parser_params.to_s.include?(w) }
        render json: {}, status: 200
      else
        render json: {}, status: 404
      end
    ...
  end
end

如果search_words在多个控制器中使用,请在ApplicationController中设置常量SEARCH_WORDS

如果在任何地方使用search_words(models / helpers / custom class / ...),请在application.rb或config / initializers / global_constant.rb中设置常量

如果经常增加或减少search_words,请创建模型(db表)来存储它们。

答案 1 :(得分:1)

您可以在lib文件夹中定义单例类,如下面提到的链接中所述:

how do I create a singleton global object in rails

或者您可以在config / initializers中创建一个文件,您可以在其中定义数组并在应用程序中的任何位置使用它。