Передача параметров в Gem

#ruby #gem #params

#ruby #rubygems #параметры

Вопрос:

Я создаю свой первый gem . Я пытаюсь получить доступ ко всем параметрам при загрузке представления, а затем назначить их моим методам модуля.

Что должно произойти, когда я посещаю appurl.com?name=elijah

и затем запустите MyGem.name его, он должен вернуть elijah

Вот мой драгоценный камень

 #my_gem/lib/my_gem.rb
module MyGem

    def self.name
      params[:name]
    end

end
  

Как мне получить доступ к параметрам того места, откуда я вызываю свой gem? Должен ли я передавать его как переменную?

Ответ №1:

Да, вы должны передать их во что-то в своем gem. Ваш gem не может видеть params метод ActionController .

Чего вы пытаетесь достичь? Возможно, мы сможем предложить лучший подход.

Если вы просто экспериментируете, попробуйте что-то вроде этого:

 module MyGem
  class Something

    def initialize(params)
      @params = params
    end

    def method_missing(symbol, *ids)
      @params[symbol] || super
    end

  end
end
  

Это приведет к извлечению элементов из хэша параметров, предоставленного ему, если они доступны в качестве символа в хэше. Итак, вы могли бы сделать что-то вроде:

 x = MyGem::Something.new(params)
x.first_name
=> 'xyz'
x.last_name
=> 'abc'
  

Комментарии:

1. Больше попыток экспериментировать, чем что-либо еще (потому что было бы проще просто сделать это в представлении). Gem должен инициализировать и проанализировать все параметры из URL. итак, если я передам url.com?first_name=xyzamp;last_name=abc его с помощью моего gem, я мог бы вызвать MyGem.first_name и MyGem.last_name вызвать соответствующие атрибуты.

2. Хорошо, тогда посмотрите мои правки… Это должно направить вас в правильном направлении.

3. Потрясающе! И с точки зрения синтаксиса, имеет ли смысл включать класс в свой модуль или сделать весь gem классом?

4. Обычно классы gem находятся внутри модуля с именем таким же или похожим на сам gem, чтобы их классы не конфликтовали с другими классами с аналогичным именем.