2013-06-01 71 views
0

好的,我很新的rails &非常確定我沒有用正確的術語問這個問題,所以這裏是我嘗試的一個例子做如何在Rails的「def create」後手動定義一個方法

我有這個在我的控制器

def create 
    @post = Post.new(params[:order]) 
    if @order.save 
    @token = DownloadToken.create 
    @post.status => "POSTED" #"POSTED" IS WHAT I WANT STORED UNDER THAT POST'S STATUS IF SAVED 
    else 
    render :new 
    end 
end 

現在,這不正是我想要做,但類似於想什麼,我做的事。再一次,我還是很新的鐵軌。有沒有辦法讓我手動設置?

預先感謝您!

回答

0

,你可以在你的模型

class Post 
    after_create :set_status 

    private 

    def set_status 
     self.update_attribute(:status, "POSTED") 
    end 

end 

添加after_create鉤或者你可以簡單的更新在你的控制器記錄:

def create 
    @post = Post.new(params[:order]) 
    if @order.save 
    @token = DownloadToken.create 
    @post.update_attribute(:status, "POSTED") 
    else 
    render :new 
    end 
end 
+0

確定..「update_attribute」 ..我是熟悉的「 after_create「,但從來沒有想過以這種方式使用它......我開始將我的頭包裹在ROR中。謝謝! – Jon

0

不太清楚你在問什麼,但ActiveRecord Callbacks可能是你在找什麼。

它將使你能夠做到以下幾點:

class Post < ActiveRecord::Base 
    before_create do 
    self.status = "POSTED" 
    end 
end 

我沒有使用before_create在這裏,只要你想創建示例代碼的新對象。只有在創建新記錄時纔會調用before_create回調函數,而不是before_save,這將在模型保存後隨時調用。

相關問題