我在我的形式女巫3场都没有在我的数据库:opening_type,OPENING_HOURS,opening_minutes。我想用这3个字段更新主要属性“开放”(在数据库中)。导轨 - 添加属性不是在模型和更新模型属性
我试过很多东西不起作用。
其实我有:
attr_accessor :opening_type, :opening_hours, :opening_minutes
def opening_type=(opening_type)
end
def opening_type
opening_type = opening.split("-")[0] if !opening.blank?
end
def opening_hours=(opening_hours)
end
def opening_hours
opening_hours = opening.split("-")[1] if !opening.blank?
end
def opening_minutes=(opening_minutes)
end
def opening_minutes
opening_minutes = opening.split("-")[2] if !opening.blank?
end
我尝试添加类似:
def opening=(opening)
logger.info "WRITE"
if !opening_type.blank? and !opening_hours.blank? and opening_minutes.blank?
opening = ""
opening << opening_type if !opening_type.blank?
opening << "-"
opening << opening_hours if !opening_hours.blank?
opening << "-"
opening << opening_minutes if !opening_minutes.blank?
end
write_attribute(:opening, opening)
end
def opening
read_attribute(:opening)
end
但是,在存取方法不叫,我想opening_type,OPENING_HOURS,opening_minutes是空的太多,如果存取器被称为...
我想我并不需要一个before_save回调应该这样做重写访问器。
注: - 的Rails 3.0.5, - opening_type,:OPENING_HOURS,:opening_minutes可能是空的
编辑:我更新了我的代码
注意这个答案假设你只想在数据库中存储结合的'opening'字段。另一种方法是将各个组件存储在数据库中,并根据需要动态构建组合字符串。根据您的要求,这可能甚至是更好的方法。 – Gareth 2012-02-21 13:19:14
我得到这个数据库的开场字段。该数据库与智能手机应用程序同步,我无法更改其结构以存储3个不同的字段。 ;-) before_validation回调的问题在于,当我们要编辑表单时...以及我需要在3个变量中截断开始字段...的形式时,您不处理这种情况。我知道我可以手动做到这一点,但我认为有更好的方法来做到这一点... – 2012-02-21 13:34:51
所有的事情都是如此,但是你提出的重写'opening ='的建议会破坏很多东西。另外,使用setter方法非常简单,它可以完全放弃传入的参数。最好有一个单独的方法(比如我的'set_opening'),它明确了它正在做什么。你不*有*使用before_validation来调用该方法,但我严重建议它是一个单独的方法 – Gareth 2012-02-21 13:43:02