1

我有一个待办事项列表,其中包含存储在同一记录中的 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'"但是,除非我使用我知道不安全的东西,否则这不起作用。即使 usingeval也不是真正的解决方案,因为我需要在视图中执行此操作 using erb,所以我有点卡住了。

4

2 回答 2

6

Ruby 充满了元编程实用程序。一种这样的实用程序是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
于 2009-09-22T15:43:51.490 回答
0

您正在寻找的是所有 Ruby 对象都有的send方法。它允许您使用字符串“发送”一条消息(无论如何,这就是调用方法的真正含义)。

例子:

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

它将返回您的任务方法返回的任何内容。

于 2009-09-22T15:44:35.927 回答