[問題] 無法呼叫成員函式?

看板Ruby作者 (失敗者)時間16年前 (2009/05/10 07:48), 編輯推噓0(0011)
留言11則, 3人參與, 最新討論串1/2 (看更多)
環境:Ruby 1.8.6 Rails 2.3.2 狀況:依照這一篇文章http://0rz.tw/MzM5Q去實做,因為一直無法run起來(沒有error) 但是無法將資料新增到database,以下為簡化的code(排錯0rz) 在 app/models/mail_reader.rb中 # app/models/mail_reader.rb require 'net/pop' class MailReader < ActionMailer::Base def receive(email) p "kerkerker" #Q:這行都不會被執行0rz,不知道為什麼? task = Task.new({:name => email.subject, :description => email.body}) end def self.check_mail logger = RAILS_DEFAULT_LOGGER logger.info "Checking for emails..." Net::POP3.enable_ssl(OpenSSL::SSL::VERIFY_NONE) #This line raises error if ruby version &lt; 1.8.7 #因為使用的是1.8.6所以本來執行會有error msg但是後來 #我有去下載Ruby1.9的pop然後放到/usr/local/lib/ruby/1.8/net/下 #就沒有error Net::POP3.start("pop.gmail.com", 995, "account", "passwd") do |pop| if pop.mails.empty? begin logger.info "No emails found." end else pop.mails.each do |email| begin mail = TMail::Mail.parse(email.pop) p "Zeeee~~~" MailReader.receive(mail) email.delete rescue Exception => e logger.error "[" + Time.now.to_s + "] " + e.message end end end end logger.info "Done." end end 執行方式./script/runner MailReader.check_mail 目前就是確定有信的話他真的會印出Zeeee~~~,而且可以正確印出header等訊息(有先 debug)但是沒辦法印出receive裡面的kerkerker 0rz,不知道為什麼?想請教依下大 家 謝謝。 附錄: -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.45.100.191 ※ 編輯: prelight 來自: 114.45.100.191 (05/10 07:53) ※ 編輯: prelight 來自: 114.45.100.191 (05/10 07:54) ※ 編輯: prelight 來自: 114.45.100.191 (05/10 07:54)

05/10 09:54, , 1F
光用 xxx.new 是不會新增一筆的..還要 xxx.save 才會存
05/10 09:54, 1F

05/10 09:54, , 2F
或是用 xxx.create (這代表 .new + .save)
05/10 09:54, 2F

05/10 18:02, , 3F
如果 Z 有出來,那科應該會出來才對,有 exception?
05/10 18:02, 3F

05/10 18:06, , 4F
等等,你根本寫錯了吧? XD def self.receive 才對
05/10 18:06, 4F

05/12 00:10, , 5F
謝謝1F 真的是如此 3F的朋友請問用不用this有差嗎?
05/12 00:10, 5F

05/12 00:10, , 6F
還是說與ruby版本有關 不然為什麼網頁要這樣寫呢@@?
05/12 00:10, 6F

05/12 01:54, , 7F
instance method 和 class method 的差別
05/12 01:54, 7F

05/12 01:56, , 8F
網頁我現在讀不出來..MailReader.receive(m)是class method
05/12 01:56, 8F

05/12 01:57, , 9F
你定義 def receive 是 instance method, 本不會被呼叫
05/12 01:57, 9F

05/12 12:12, , 10F
嗯嗯 這個概念與java似乎一樣  那我了解了。感激:)
05/12 12:12, 10F

05/12 14:10, , 11F
可以先這樣想,在看 class 也是一種 instance 之前
05/12 14:10, 11F
文章代碼(AID): #1A1XOsr7 (Ruby)
文章代碼(AID): #1A1XOsr7 (Ruby)