Ruby发送(attribute.to_sym)Rails方法

Fra*_*ank 1 ruby ruby-on-rails-3

我正在使用Ruby 1.9.2并且需要遍历表的所有值以确保所有内容都采用UTF-8编码.有很多列,所以我希望能够使用column_names方法遍历它们并将值编码为UTF-8.我认为这可行:

def self.make_utf
  for listing in Listing.all
    for column in Listing.column_names
      column_value_utf = listing.send(column.to_sym).encode('UTF-8')
      listing.send(column.to_sym) = column_value_utf
    end
    listing.save
  end

  return "Updated columns to UTF-8"

end
Run Code Online (Sandbox Code Playgroud)

但它返回一个错误:

syntax error, unexpected '=', expecting keyword_end
        listing.send(column.to_sym) = column_value_utf
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚如何使这项工作正常.

mu *_*ort 9

您使用的是send错误的,并且您发送的错误符号表示您想要执行的操作:

listing.send(column + '=', column_value_utf)
Run Code Online (Sandbox Code Playgroud)

你试图用一个参数来调用这个x=方法(对于某些人来说x)column_value_utf,这就是o.x = column_value_utf通常会做的事情.因此,您需要构建正确的方法名称(只需要一个字符串),然后将该方法的参数作为参数发送给send.