2010-08-24 63 views
0

我有一張紙條模型,用下面的聯想如何在不需要從RoR中的模型訪問current_user.id的情況下實現此代碼?

note.rb

has_many :note_categories, :dependent => :destroy 
has_many :categories, :through => :note_categories 

的NoteCategory模型的建立是爲了充當筆記和類別之間的連接表。

我需要實現以下幾點:

  1. 一個用戶從一個音符一個類別。這可以通過從註釋中刪除一個類別(刪除note_categories表中的一個條目),或者通過完全刪除註釋(刪除note_categories表中與該註釋有關的所有條目)來實現
  2. 在行之前note_categories被刪除,我需要確定是否從筆記刪除類別的用戶是最初創建該類別的同一用戶(類別模型中的創建者字段)
  3. 如果它是相同的用戶,則類別條目本身被刪除

很明顯要做到這一點,我需要訪問用戶的ID,以檢查類別的創建者字段。我已經在NoteCategory模型中使用before_destroy方法來做其他事情,但是我不能在那裏訪問current_user.id,因爲它是一個模型,而current_user是Application Controller中的一個方法。從我在這裏讀到的問題來看,從模型中訪問當前用戶的id似乎是不好的形式。

我不認爲我可以在這種情況下使用控制器,因爲當筆記被刪除時,:dependent => :destroy這一行意味着note_categories中的關聯行也會被刪除。我也需要在這種情況下執行創建者檢查,但是note_categories行通過模型中的銷燬方法刪除,而不是控制器,這是:dependent => :destroy指定的行爲。

那麼我應該怎麼去做呢?謝謝閱讀!

回答

0

這樣做可能是一個attr_accessor添加到注模型,像這樣的一種方法:

# in Note.rb 
attr_accessor :destroyed_by 

和銷燬記錄之前設置:在你的Note.rb

# NotesController#destroy 
@note.destroyed_by = current_user.id 
@note.destroy 

然後before_destroy致電,您可以根據destroyed_by ID檢查類別的創建者ID。

+0

對不起,我忘了在原始問題中包含一些東西,這意味着我無法使用控制器來解決此問題。我現在編輯它。 – ben 2010-08-24 05:12:00

0

我認爲你想維護誰創建了這個帖子的日誌和誰刪除它。 before_destroy方法執行刪除關聯的部分,我認爲它適用於您。以保持創建該筆記的用戶是否刪除該筆記的記錄來到記錄部分。我希望這可以幫助你解決這個問題

http://rohitsharma9889.wordpress.com/2010/08/19/logging-in-ruby-on-rails/

編輯: 您也可以嘗試閱讀這篇文章。我建議你喜歡這一個以上一個

Environment variables in Model

0

你說

行前/秒note_categories是/被刪除,我需要確定用戶是誰從記事中刪除類別是最初創建類別(類別模型中的創建者字段)的相同用戶 如果是相同用戶,則類別條目本身將被刪除

你確定你不想做這樣的事嗎?如果用戶在許多筆記中使用了相同的類別,並且想從其中一個筆記中刪除它,該怎麼辦?您確定要刪除note_categories中的條目,但是您是否也要刪除該類別本身?

這種場景的一個常見實現是在刪除note_category(通過或許是before_destroy)時檢查這一個是否是該類別的最後一個note_categories,如果是,則將其刪除。這也意味着,如果一個筆記被刪除,只有相關的note_categories應該被刪除,而不是類別本身。

+0

我知道這聽起來很奇怪,但我描述的是我想要的。我使用條款說明和類別的方式可能與它們的正常含義不符,因爲該應用程序是一種遊戲。 – ben 2010-08-24 09:02:03

相關問題