Помощь по настройке ruby ​​on rails - PullRequest
2 голосов
/ 30 сентября 2010

извините за мой английский,

У меня есть модель с именем 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

но это не работает

помогите пожалуйста

Спасибо за совет!

Ответы [ 4 ]

7 голосов
/ 30 сентября 2010

С

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

В своем методе вы называете себя, потому что это тот же метод. Вам нужно изменить длительность атрибутов, а не метод

def duration=(d)
  write_attribute(:duration, "#{d[:hours]}:#{d[:minutes]}:00")
end
4 голосов
/ 09 октября 2011

Вот правильный синтаксис, который вы искали:

В представлении (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

Для полноты, переопределить геттер

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 вызовет функции получения или установки (которые вы пытаетесь переопределить)

0 голосов
/ 30 сентября 2010

Хорошо, я решил это

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

Я создал метод установки с именем, отличным от атрибута, для установки моего атрибута

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

Thk в любом случае

Привет.

0 голосов
/ 30 сентября 2010

Ваши элементы формы имеют имена hours и minutes, но ваша модель ищет ключи h и m?

Это действительно то, что вы имеете в виду?

...