2010-07-15 19 views
0

我堅持認爲沒有列名一些不幸的選擇,一軌2.1應用程序。例如,一個事件有一個開始和結束日期。而不是使用start_atend_at原設計採用startend。當然這導致使用結束作爲列名

def end 
    read_attribute(:end) || 1.hour.from_now 
    end 

我很驚訝這甚至解析。這是合法的紅寶石?真正的問題是,當運行一個backgroundrb作業來發送提醒郵件時,erb正在'堆棧層面太深'爆炸。模板是

<%= [@event.name, @event.when_pretty, @event.location, @event.association, 
@event.notes].reject(&:blank?) * "\n" %> 

如果我在控制檯deliver_reminder沒有錯誤,但是當deliver_reminder後臺作業過程中被調用時,出現錯誤。

問:我應該重構刪除end方法,或在堆棧錯誤是由別的原因引起的?

線#富的1 /郵件/ reminder.rhtml

1: <%= [@event.name, @event.when_pretty, @event.location, @event.association, @event.notes].reject(&:blank?) * "\n" %> 

lib/virtual_attributes_and_associations.rb:59:in `virtual_attribute_names' 
lib/virtual_attributes_and_associations.rb:83:in `read_attribute_without_virtual' 
lib/virtual_attributes_and_associations.rb:86:in `read_attribute' 
vendor/rails/activerecord/lib/active_record/base.rb:2720:in `send' 
vendor/rails/activerecord/lib/active_record/base.rb:2720:in `clone_attribute_value' 
vendor/rails/activerecord/lib/active_record/dirty.rb:127:in `write_attribute' 
vendor/rails/activerecord/lib/active_record/attribute_methods.rb:211:in `data=' 
lib/virtual_attributes_and_associations.rb:9:in `included' 
vendor/rails/activesupport/lib/active_support/callbacks.rb:177:in `call' 
vendor/rails/activesupport/lib/active_support/callbacks.rb:177:in `evaluate_method' 
vendor/rails/activesupport/lib/active_support/callbacks.rb:161:in `call' 
vendor/rails/activesupport/lib/active_support/callbacks.rb:93:in `run' 
vendor/rails/activesupport/lib/active_support/callbacks.rb:92:in `each' 
vendor/rails/activesupport/lib/active_support/callbacks.rb:92:in `send' 
vendor/rails/activesupport/lib/active_support/callbacks.rb:92:in `run' 
vendor/rails/activesupport/lib/active_support/callbacks.rb:272:in `run_callbacks' 
vendor/rails/activerecord/lib/active_record/callbacks.rb:298:in `callback' 
vendor/rails/activerecord/lib/active_record/base.rb:1450:in `send' 
vendor/rails/activerecord/lib/active_record/base.rb:1450:in `instantiate' 
vendor/rails/activerecord/lib/active_record/base.rb:582:in `find_by_sql' 
vendor/rails/activerecord/lib/active_record/base.rb:582:in `collect!' 
vendor/rails/activerecord/lib/active_record/base.rb:582:in `find_by_sql' 
vendor/rails/activerecord/lib/active_record/base.rb:1341:in `find_every' 
vendor/rails/activerecord/lib/active_record/base.rb:1376:in `find_one' 
vendor/rails/activerecord/lib/active_record/base.rb:1362:in `find_from_ids' 
vendor/rails/activerecord/lib/active_record/base.rb:537:in `find' 
vendor/rails/activerecord/lib/active_record/associations/belongs_to_association.rb:44:in `find_target' 
vendor/rails/activerecord/lib/active_record/associations/association_proxy.rb:196:in `load_target' 
vendor/rails/activerecord/lib/active_record/associations/association_proxy.rb:99:in `reload' 
vendor/rails/activerecord/lib/active_record/associations.rb:1084:in `contact' 
lib/association.rb:52:in `associated_object' 
lib/association.rb:48:in `association' 
vendor/rails/activerecord/lib/active_record/associations/association_proxy.rb:177:in `send' 
vendor/rails/activerecord/lib/active_record/associations/association_proxy.rb:177:in `method_missing' 
app/views/foo/mailer/reminder.rhtml:1:in `_run_erb_47app47views47foo47mailer47reminder46rhtml' 
+0

我不知道了很多關於它,但我相信,你可以給某些列「別名」,這樣你可以重命名爲'end_at'的活動記錄 – Earlz 2010-07-15 19:07:18

回答

0

原來的問題是一個名爲association庫方法,當我改變了調用associated_object(這是所謂的由協會#協會),堆棧錯誤不再發生。