Ruby: определение атрибутов путем создания цикла? - PullRequest
0 голосов
/ 21 января 2010

Я пытаюсь определить атрибуты из массива следующим образом:

["a", "b", "c"].each do |field|
  @recipe.field = "anything"
end

Я хочу получить что-то вроде этого:

@store.a = "anything"
@store.b = "anything"
@store.c = "anything"

Вы знаете, что мне делать с полем @ store. выше? Я попытался @ store.send (поле), но это не работает для меня, и я понятия не имею, какие ключевые слова для поиска, чтобы найти решение выше. Любая помощь с благодарностью.

Ответы [ 2 ]

4 голосов
/ 21 января 2010

Метод установки для атрибута a известен как a=, поэтому вы можете использовать send с аргументом "a=" для вызова метода установки:

["a", "b", "c"].each do |field|
  @recipe.send(field + "=", "anything")
end
1 голос
/ 21 января 2010

Если вы хотите динамически добавлять атрибуты в класс, тогда вы должны использовать attr_accessor mthod (или проверить, что он делает

class Recipe
  attr_accessor *["a", "b", "c"]
end

["a", "b", "c"].each do |field|
  @recipe.send("#{field}=", "anything")
end

Edit:
Как видно из примера, если вы хотите присвоить что-то полю, определенному методом def attr=, вам нужно вызвать send с "attr=", value params.

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