在我看来,我使用<%= f.text_field :latlon %>
编辑latlon
属性(不是ActiveRecord列)。保存时,我想解析latlong
并在lat
回调中将其拆分为lon
和before_save
。
我不知道如何访问回调中latlon
变量的参数。我尝试了self.latlong
,但调用与attr_reader
和lat
属性相同的lon
。
我知道我可以在控制器中执行此操作,但这是模型逻辑,不是吗?
#app/models/bla.rb
class Bla < ActiveRecord::Base
attr_accessible :name, :lat, :lon, :latlon #but latlon is not an ActiveRecord Attribute
before_save :foo
def latlon
"#{lat}, #{lon}"
end
attr_writer latlon
private
def foo
self.lat = # regex that parse latlon
self.lon = # regex that pase coors
end
end
答案 0 :(得分:3)
您可以覆盖分配方法以执行您所描述的操作。这样可以更快/更容易地进行单元测试。
def latlon=(new_value)
# do work to split and assign
end
答案 1 :(得分:1)
我认为您可以用
替换attr_writer latlon
def latlon=(latlon)
self.lat = # regex that parses lat from latlon
self.lon = # regex that parses lon from latlon
end
也许不要制作:lat和:lon attr_accessible
的一部分,因为它们永远不会被大量分配,即来自params
数组。从控制器传递的params
将包含latlon
值(格式正确)。
在这种情况下,我认为你不需要before_save
。
答案 2 :(得分:0)
该模型应该可以访问您可以使用的实例变量@latlon
,对吗?