ruby-on-rails - 通过发送更新 ActiveRecord

标签 ruby-on-rails ruby metaprogramming

我正在迭代哈希,如果哈希键与列名称(由 attr_accessible 定义)匹配,那么我想更新该列。

def self.load_primer3_output(rawfile_hash)
  primer3_output = Primer3Output.new
  rawfile_hash.each do |key, value|
    if primer3_output.class.accessible_attributes.include?(key)
      primer3_output.send(key) = value
    end
  end
  primer3_output.save
end

我在发送时遇到语法错误:

** [out :: 192.241.193.126]     /home/assay/apps/assay/releases/20130823054701/app/workers/primer3_query.rb:96: syntax error, unexpected '=', expecting keyword_end
** [out :: 192.241.193.126] (
** [out :: 192.241.193.126] SyntaxError
** [out :: 192.241.193.126] )
** [out :: 192.241.193.126]
** [out :: 192.241.193.126] primer3_output.send(key) = value
** [out :: 192.241.193.126]
** [out :: 192.241.193.126] ^

编辑

顺便说一下,

eval 有效。不过我更喜欢使用发送。

if primer3_output.class.accessible_attributes.include?(key)
    #primer3_output.send(key) = value
    eval("primer3_output.#{key} = value")
end

最佳答案

更改为

primer3_output.send("#{key}=", value)

关于ruby-on-rails - 通过发送更新 ActiveRecord,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18395679/

相关文章:

带有双 0 的 Ruby float

ruby-on-rails - Ruby 中的 sleep 语句不接受任何 Rails 转换

python - 如何在 C++ 中包含多语言开发头文件

ruby - 使用 Nokogiri/Open URI 获取动态生成的 HTML

metaprogramming - JetBrains元编程系统

ruby - 为什么人们使用 `Module.send(:prepend, …)` ?

ruby-on-rails - 将 Ruby on Rails 应用程序从 sqlite 转换为 MySQL?

javascript - Rails - 禁用 js&css//=测试需要

html - 为什么 erb 模板中的字符串插值失败?

java - 是否已更新 JavaBean 规范以反射(reflect)注解的存在