Rails - 控制台和Web中的不同输出

时间:2014-08-11 14:45:20

标签: ruby-on-rails

我在某个模型中有以下构造

...
def somefield=(somefield)
  write_attribute(:somefield, Base64.encode64(somefield))
end
def somefield
  Base64.decode64(read_attribute(:somefield))
end
...

在rails控制台中工作正常:

m = model.first
=> ...
m.somefield
=> "This is a base64 encoded string"

但是当我在rails服务器中使用相同的方法时,我会得到

VGhpcyBpcyBhIGJhc2U1NCBlbmNvZGVkIHN0cmluZw==

base64编码的字符串。 我用以下方法将表达式包装在视图中:

= Base64.decode64(data_row[:somefield])

这很好用,但这不是轨道方式和不幸的解决方案。

有人可以说出为什么我在控制台和服务器上得到不同的输出 我如何用两种不同的输出解决问题?

(使用Rails 4.0.1,ruby 1.9.3p383)

2 个答案:

答案 0 :(得分:1)

我认为你根本没有调用somefield方法,这就是它没有被解码的原因。在您的示例中,您正在调用data_row[:somefield]。你应该打电话给model.somefield

答案 1 :(得分:0)

'。send'是解决我问题的方法。

m.send(somefield)

使用send,程序将运行自定义setter和getter方法,并在控制台和应用程序上提供相同的结果。