2009-06-01 17 views
7

Yinelenen, haftalık olayları olan bir proje çalışıyorum. Böylece, birkaç DateTime alanını geleneksel olmayan bir şekilde kullanıyorum. Üzerinde çalışıyorum, bir hafta içi için bir seçim çıkaran ve zaman için bir seçim yaratan bir alan oluşturan bir Form Oluşturucu'dur. Öyle çalıştığını, çevrimiçi bulunan on iki saatlik eklentisi kullanıyorum:Raylar Formbuilder Soru

class ActionView::Helpers::FormBuilder 
    def dow_time(dow,time,options={}) 
    rval = select(dow, DateTime::DAYNAMES) 
    rval += time_select(time, {:minute_step => 15, :ignore_date => false, :twelve_hour => true}) 
    end 
end 

I having seçme hafta içi aslında varsayılan bir seçili değere sahip olmamasıdır. Bu, oluşturma sayfalarında ancak düzenleme sayfalarında iyi çalışmıyor. dow, haftanın dizesinin "Pazartesi", "Salı" vb. olduğu arama modelindeki alanı referans alan bir simgedir. Bu değeri dow kullanarak çağrı modelinden nasıl çıkarabilirim.

self[dow] 

Bu, farklı bir sınıfta olduğu için çalışmıyor.

Herhangi bir fikrin var mı? Farklı birşey? Eğer bir FormBuilder İçerideyseniz

cevap

13

, o zaman basitçe 'nesne' değişkeni kullanarak geçerli nesne erişebilirler.

Ör:

olarak: form_for aradığınızda FormBuilder

def custom_datetime_select(field, options = {}) 
    start_time = object.send(field) 
    ... 
end 

Hem object ve object_name yılında edit.html.erb

<% form_for(@event) do |form| %> 
    <%= form.custom_datetime_select(:event_starts_at) %> 
<% end %> 

sizin için ayarlanır. Daha fazla ayrıntı için bkz. actionpack/lib/action_view/helpers/form_helper.rb.

+0

Sen kazandın, ben sadece aradığım şey bu. Teşekkürler! –

0

Bu sizin için çalışması gerekir ...

class ActionView::Helpers::FormBuilder 
    def dow_time(dow_model, time, options={}) 
    rval = select(dowmodel, :dow, DateTime::DAYNAMES) 
    rval += time_select(time, {:minute_step => 15, :ignore_date => false, :twelve_hour => true}) 
    end 
end 
+0

self.read_attribute başarısız: # için tanımsız yöntemine 'read_attribute' "modelinstance" modeli değişkendir çünkü çalışmıyor, ya da belki yanlış anlama ettiğimi diyorsun. –

+0

Kodu düzenledim. İle ara: <% = dow_time (@modmodel, zaman, vs ...)%> –

+0

Çok yardımcı oldu! Teşekkürler. :) –