2010-07-02 51 views
0

我有一個rails應用程序,其中我擁有belongs_to has_many關係中的集羣和用戶。在剛剛構建的對象中訪問ID

在cluster_controller創建方法我寫:

@cluster = @current_user.clusters.build(params[:cluster]) 

現在我要運行一些命令行腳本:

output = `echo cluster#{@cluster.id} > /tmp/out` 

...的功能在這裏

其餘的我也試過

output = `echo cluster#{@cluster.id.to_s} > /tmp/out` 

當我這樣做時,文件只集中在它而不是集羣#。爲什麼是這個,我該如何解決它?

回答

6

build方法初始化一個新的ActiveRecord對象,但不會將其持久化到數據庫;通常,id屬性僅在保存記錄後(假設它是標準自動增量主鍵)纔會設置。您可能想要使用create而不是build

+0

謝謝,繼承人問題: 腳本可能會失敗,在這種情況下我不想創建羣集。我應該從數據庫中刪除它還是有更好的方法? – dschatz 2010-07-02 12:56:32

+0

您可以在事務中進行創建,然後在腳本失敗時將事務回滾。另一個選擇是輸出一些其他識別特徵而不是id到日誌 - 這取決於你的用例。 – 2010-07-02 14:07:54

+0

我只需要爲每次運行每次創建羣集時運行的腳本提交一個唯一值。我選擇了id,因爲它必須是唯一的。然後,如果腳本因任何原因失敗,我應該將用戶重定向到主頁(或任何地方),並讓他們知道他們的集羣創建失敗。這當然不應該改變數據庫。 – dschatz 2010-07-02 14:18:50

相關問題