Wie kann ich eine Variable verwenden, um den Feldnamen eines Ruby-Objekts in erb zugreifen? Ex. Model.task _ # {variable}

StackOverflow https://stackoverflow.com/questions/1460831

  •  13-09-2019
  •  | 
  •  

Frage

Ich habe eine To-do-Liste mit fünf Aufgaben, die auf dem gleichen Datensatz gespeichert werden.

Todo.task_one, Todo.task_two, etc.

Was würde ich tun, ist eine Schleife durch die Felder wie diese in der Lage sein,

total_tasks = ["one", "two", "three", "four", "five"]
for tasks in total_tasks
Todo.task_#{tasks} = "text here"
end

Dies ist jedoch nicht funktioniert, wenn ich eval "Todo.task_#{tasks} = 'text here'" verwenden, die ich weiß nicht sicher ist. Selbst mit eval nicht wirklich die Lösung ist, weil ich dies in der Ansicht tun muß, erb verwenden, so dass ich bin ein bisschen fest.

War es hilfreich?

Lösung

Ruby ist voll von metaprogramming Utilities. Ein solches Programm ist Object#send.

["one", "two", "three", "four", "five"].each do |task|
  Task.send("task_#{task}=", "text here")
end

Ein andere Möglichkeit ist es, nicht den Aufgaben menschliche freundliche Methode Namen geben.

5.times do |i|
  Task.tasks[i] = "foo"
end

Andere Tipps

Was Sie suchen ist die senden Methode, die alle Ruby-Objekte haben. Es ermöglicht Ihnen, ‚Senden‘ eine Nachricht (die, was Aufruf ist eine Methode wirklich sowieso ist) mit einem String.

Beispiel:

Todo.send("task_#{tasks}")

Es wird wieder, was Ihre Aufgabe Methoden zurück.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top