ruby on Rails 自定义设置器帮助

发布于 2024-09-25 15:24:27 字数 417 浏览 5 评论 0原文

抱歉我的英语,

我有一个名为 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

,但不起作用,

请帮忙

提供建议!

sorry for my english,

I have a model named Recipe and Recipe has an attribute named duration

In my form, I have 2 dropdowns to get duration attribute

select_tag 'duration[hours]'
select_tag 'duration[minutes]'

I need the value of duration attribute like this format hh:mm:ss

I have tried with

def duration=(d)
  self.duration = "#{d[:hours]}:#{d[:minutes]}:00"
end

but that is not working

help please

Thk in advice!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

蓝眼睛不忧郁 2024-10-02 15:24:27

def duration=(d)
  self.duration = "#{d[:hours]}:#{d[:minutes]}:00"
end

您的方法中,您可以调用自己,因为它是相同的方法。您需要更改属性持续时间而不是方法

def duration=(d)
  write_attribute(:duration, "#{d[:hours]}:#{d[:minutes]}:00")
end

With

def duration=(d)
  self.duration = "#{d[:hours]}:#{d[:minutes]}:00"
end

In your method you call yourself because it's the same method. You need change the attributes duration not the method

def duration=(d)
  write_attribute(:duration, "#{d[:hours]}:#{d[:minutes]}:00")
end
山色无中 2024-10-02 15:24:27

以下是您正在寻找的正确语法:

在视图中 (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]

但是NOT:

self.duration = "#{d[:hours]}:#{d[:minutes]}:00"
self.duration

通过 self.name 将调用 getter 或 setter 函数(您试图覆盖它们)

Here is the correct syntax that you were looking for:

In the view (recipes/_form.html.erb...)

select_tag 'duration[hours]'
select_tag 'duration[minutes]'

In the model (recipe.rb...)

def duration=(d)
  write_attribute(:duration, "#{d[:hours]}:#{d[:minutes]}:00")
end

For completeness, to override the getter

def duration
  read_attribute(:duration)
end

You can also use:

self[:duration] = "#{d[:hours]}:#{d[:minutes]}:00"
self[:duration]

But NOT:

self.duration = "#{d[:hours]}:#{d[:minutes]}:00"
self.duration

Going through self.name will call getter or setter functions (which you are attempting to override)

梦在夏天 2024-10-02 15:24:27

您的表单元素名为小时分钟,但您的模型正在寻找hm键?

这真的是你的意思吗?

Your form elements are named hours and minutes but your model is looking for h and m keys?

Is that really what you mean?

骑趴 2024-10-02 15:24:27

好的,我解决了这个问题,

select_tag 'custom_duration[hours]'
select_tag 'custom_duration[minutes]'

我创建了一个与属性名称不同的 setter 方法,

def custom_duration=(d)
  self.duration = "#{d[:hours]}:#{d[:minutes]}:00"
end

以任何方式

设置我的属性。

Ok, I solved it

select_tag 'custom_duration[hours]'
select_tag 'custom_duration[minutes]'

I created a setter method with a diferent name than attribute to set my attribute

def custom_duration=(d)
  self.duration = "#{d[:hours]}:#{d[:minutes]}:00"
end

thk any way

Regards.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文