对不起我的英文,
我有一个名为Recipe
的模型,而Recipe有一个名为duration
在我的表单中,我有2个下拉列表来获取持续时间属性
select_tag 'duration[hours]'
select_tag 'duration[minutes]'
我需要像这种格式hh:mm:ss
我试过
def duration=(d)
self.duration = "#{d[:hours]}:#{d[:minutes]}:00"
end
但这不起作用
请帮助
建议!
答案 0 :(得分:7)
使用
def duration=(d)
self.duration = "#{d[:hours]}:#{d[:minutes]}:00"
end
在你的方法中,你称之为自己,因为它是相同的方法。您需要更改属性持续时间而不是方法
def duration=(d)
write_attribute(:duration, "#{d[:hours]}:#{d[:minutes]}:00")
end
答案 1 :(得分:4)
以下是您正在寻找的正确语法:
在视图中(recipes / _form.html.erb ...)
select_tag 'duration[hours]'
select_tag 'duration[minutes]'
在模型中(recipe.rb ...)
def duration=(d)
write_attribute(:duration, "#{d[:hours]}:#{d[:minutes]}:00")
end
为完整起见,要覆盖getter
def duration
read_attribute(:duration)
end
您也可以使用:
self[:duration] = "#{d[:hours]}:#{d[:minutes]}:00"
self[:duration]
但不是:
self.duration = "#{d[:hours]}:#{d[:minutes]}:00"
self.duration
通过self.name将调用getter或setter函数(您试图覆盖它们)
答案 2 :(得分:0)
您的表单元素名为hours
和minutes
,但您的模型正在寻找h
和m
个键?
这真的是你的意思吗?
答案 3 :(得分:0)
好的,我解决了它
select_tag 'custom_duration[hours]'
select_tag 'custom_duration[minutes]'
我创建了一个名称不同于属性的setter方法来设置我的属性
def custom_duration=(d)
self.duration = "#{d[:hours]}:#{d[:minutes]}:00"
end
无论如何
问候。