2009-10-07 209 views
0

目前,我在rails應用程序中有一個6模型ruby,我添加了authlogic。 整體的設置是Ruby on Rails用戶設置

User :has_many categories, topics,messages 
Categories has_many topics, 
Topics has_many messages 

(有和相應的相對belongs_to的鏈接)。

當我嘗試訪問current_user.categories.find(2)時,控制器中沒有返回任何結果。

而且,當我嘗試運行此

current_user.topics.find(params[:topic_id]).messages.build 

然後,

@msg = current_user.messages.build(params[:message]) 
@msg.save 

它不保存從的has_many user_ID的。被該CURRENT_USER指令之前的工作中,加入

這一計劃的所有功能。

我是不是做與設置錯了嗎?或與執行?

因爲關聯在構建後沒有保存,我以後可以在模型中添加user_id字段嗎?

對不起所有的問題,並提前致謝。

回答

1

我認爲你最好的選擇是逐步進行。 current_user返回什麼?該用戶的ID是否與你的數據庫中的一個相匹配?該用戶是否有任何類別?他們中的任何人有2的ID?

如果您可以將您的問題隔離在鏈接調用中的單個圖層中,則調試起來會更容易。

+1

我同意,這是一個很大的耦合。你不知道許多層中的哪一層破壞了。 它也可能有助於打開ActiveRecord日誌記錄來查看正在生成的查詢。 – 2009-10-08 03:03:24

0

謝謝凱爾。 我已經解決了在模型中使用過濾器而不是使用控制器通過關聯在創建上分配它的問題。 Current_user僅使用authlogic返回當前用戶的記錄。 我喜歡這個項目在哪裏鞠躬,並且可能會在部分視覺調整,安全性和更多css之後部署它。 無論您正在開發什麼,回調和過濾器都令人驚歎。 另外,如果您需要從application_controller獲取變量到模型,請使用美元符號ruby變量,而不是類實例變量(at-sign)。 相比於自帶的Php或sintra應用程序,Rails非常簡單。 此外,有多少模型用於rails應用程序?

+0

如果您使用的是美元符號,那麼您正走在黑暗的道路上。美元符號用於全局變量,而全局變量通常意味着您將緊密耦合您的類。 不確定你的意思是Rails應用程序使用了多少個模型 - 有些項目可能有少數幾個,我們有幾十個,其他幾個有幾百個。取決於您的應用程序的範圍和代碼庫的成熟度。博客或Twitter需要比Mint.com更少的模型或其他內容。 – Kyle 2009-10-08 04:58:22

+0

我不想調試大型應用程序。 6個模型對我來說已經足夠了。 如果我不使用全局,我怎樣才能從控制器獲取當前用戶對象到模型?這是我的應用程序中唯一的全球化...實際上,我第一次需要使用紅寶石。 – CodeJoust 2009-10-08 11:36:38