Как инициализировать класс для установки пользовательских значений параметров, используя Ruby on Rails? - PullRequest
1 голос
/ 06 февраля 2011

Я использую Ruby on Rails 3, и я хотел бы инициализировать мой класс.В моем случае мне нужно устанавливать params[:name] ||= {} каждый раз, когда я использую этот класс.

Как это сделать?


ОБНОВЛЕНИЕ I

Можно ли упростить вещи, используя что-то вроде

class A
  def initialize
    params[:name] ||= {}
  end
end

?


ОБНОВЛЕНИЕ II

Я забыл , чтобы сказать, что в моем классе я должен использовать этот параметр в качестве хэша:

class A
  def initialize
    # code to initialize params[:name] ||= {}
  end

  def action_name
    params[:name][:ronda] = "Jack"
  end
end

Если я пытаюсь установить params[:name][:ronda] без инициализации params[:name] ||= {} Я получаю ошибку.Для этого я должен инициализировать класс.

Я выше код, который я могу сделать

  def action_name
    params[:name] ||= {}
    params[:name][:ronda] = "Jack"
  end

, и это будет работать, но , так как я должен использовать это для каждого действия вкласс, я хотел бы рефрактор код установки params[:name] сразу.

Ответы [ 2 ]

5 голосов
/ 06 февраля 2011

Вы можете использовать функцию инициализации для установки значений по умолчанию:

class A
  def initialize
    @params = {name: {}}
  end

  def params
    @params
  end
end

A.new.params # {:name => {}}

Вы также можете по умолчанию при доступе таким образом:

class A
  def initialize
    @params = {}
  end

  def params
    @params[:name] ||= {}
    @params
  end
end

A.new.params # {:name => {}}

Разница в том, что первый пример добавляет параметр: name при создании (A.new), а второй пример добавляет его при доступе (A.new.params).

0 голосов
/ 06 февраля 2011

Просто сделай

@params = {
    :name => {
        :ronda => {}
    }
}

в инициализации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...