كيف يمكنني استخدام متغير للوصول إلى اسم الحقل لكائن Ruby في ERB؟ السابق. model.task _ # {variable}

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

  •  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}")

سيعود كل ما تعود أساليب المهام الخاصة بك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top