#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, чтобы их классы не конфликтовали с другими классами с аналогичным именем.