我在某个模型中有以下构造
...
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)
答案 0 :(得分:1)
我认为你根本没有调用somefield
方法,这就是它没有被解码的原因。在您的示例中,您正在调用data_row[:somefield]
。你应该打电话给model.somefield
。
答案 1 :(得分:0)
'。send'是解决我问题的方法。
m.send(somefield)
使用send,程序将运行自定义setter和getter方法,并在控制台和应用程序上提供相同的结果。