كيف يمكنني استخدام متغير للوصول إلى اسم الحقل لكائن Ruby في ERB؟ السابق. model.task _ # {variable}
-
13-09-2019 - |
سؤال
لدي قائمة مهام مع 5 مهام يتم تخزينها على نفس السجل.
Todo.task_one, Todo.task_two, etc.
ما أود القيام به هو أن تكون قادرة على حلقة من خلال الحقول مثل هذا
total_tasks = ["one", "two", "three", "four", "five"]
for tasks in total_tasks
Todo.task_#{tasks} = "text here"
end
ومع ذلك، هذا لا يعمل إلا إذا كنت أستخدم eval "Todo.task_#{tasks} = 'text here'"
التي أعرفها ليست آمنة. حتى استخدام eval
ليس حقا الحل، لأنني بحاجة إلى القيام بذلك في العرض باستخدام erb
, ، لذلك أنا عالق.
المحلول
Ruby مليء بالمرافق Metaprogramming. واحدة من هذه الأداة Object#send
.
["one", "two", "three", "four", "five"].each do |task|
Task.send("task_#{task}=", "text here")
end
خيار آخر هو عدم إعطاء المهام أسماء أسماء الأسلوب الودية الإنسانية.
5.times do |i|
Task.tasks[i] = "foo"
end
نصائح أخرى
ما كنت تبحث عن هو إرسال طريقة أن جميع كائنات روبي لديها. يسمح لك ب "إرسال" رسالة (وهو ما يسميه طريقة حقا على أي حال) بسلسلة.
مثال:
Todo.send("task_#{tasks}")
سيعود كل ما تعود أساليب المهام الخاصة بك.
لا تنتمي إلى StackOverflow