2010-09-29 3 views
2

извините за мой английский,рубин на рельсах пользовательских сеттер помочь

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

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

помощь, пожалуйста

THK в советы!

+2

, когда вы говорите «не работает», что это значит? Есть ли сообщение об ошибке, или код просто сидит в течение всего дня, отказываясь от работы? – Gareth

ответ

7

С

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

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

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

write_attribute устарел какое-то время: http://apidock.com/rails/ActiveRecord/Base/write_attribute – SooDesuNe

+0

... ну, может быть, нет: http://api.rubyonrails.org/ классы/ActiveRecord/base.html – SooDesuNe

0

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

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

+0

Извините, я его отредактировал –

0

Хорошо, я решил его

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

Я создал сеттер метод с именем Diferent, чем атрибут, чтобы установить свой атрибут

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

THK никак

С уважением.

4

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

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

Проходя через себя.имя будет вызывать функции getter или setter (которые вы пытаетесь переопределить)

Смежные вопросы