ruby-on-rails - 如何使用变量访问 erb 中 ruby​​ 对象的字段名?前任。模型.task_#{变量}

标签 ruby-on-rails ruby erb

我有一个待办事项列表,其中包含存储在同一条记录中的 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 也不是真正的解决方案,因为我需要在 View 中使用 erb 执行此操作,所以我有点卡住了。

最佳答案

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

关于ruby-on-rails - 如何使用变量访问 erb 中 ruby​​ 对象的字段名?前任。模型.task_#{变量},我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1460831/

相关文章:

ruby - 修改 html 节点内的文本 - nokogiri

mysql - ruby find_by_sql 字符串参数将 int 参数转换为字符串在限制 mysql 8 中抛出错误

javascript - 根据环境在 Rails 中加载不同的 Javascript 文件

mysql - 无法在 Windows 上安装 mysql2 for Rails 3

ruby-on-rails - 设计创建用户并登录测试设置

javascript - 同一 link_to 助手的不同行为 - 模板丢失

javascript - 在 HTML 中设置 Dropdown 的默认值 - 特殊情况

ruby-on-rails - 本地人可以在 Rails View 中通过两层吗?

ruby-on-rails - Gearman 架构查询

ruby-on-rails - Capybara::ElementNotFound: 无法找到 css "a"