1

我正在遍历一个哈希,如果哈希键与列名(由 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
4

2 回答 2

5

将其更改为

primer3_output.send("#{key}=", value)
于 2013-08-23T06:00:25.693 回答
-2

使用send方法时,键应该是符号和字符串。

使用符号时更改为这个。

primer3_output.send(key.to_sym) = value

使用字符串时更改为这个。

primer3_output.send("#{key}=", value)
于 2013-08-23T06:00:59.267 回答