2012-06-27 55 views
3

我有一個模型,例如:是否有可能將參數傳遞給模型中的before_create?

class Account < ActiveRecord::Base 

    before_create :build_dependencies 

    def build_dependencies 
    # use nifty params to build this related object 
    build_nifty_object(params) 
    end 

初始PARAMS通過一個隱藏的表單標籤的帳號新形式發送英寸

但是沒有理由/需要將這些參數保存到帳戶模型中。我只需要在NiftyObject模型中使用它們。

有沒有一種聰明的方法將這些參數傳遞給before_create方法?或者可能完成相同任務的其他選擇?

謝謝!

+0

param哈希通常在控制器中用於創建您的模型對象。 niftyObject與您的賬戶模型有什麼關係?在你的代碼示例中,我們看不到belongs_to或指示這兩個對象之間存在關係的東西? – Cygnusx1

回答

1

您可以使用實例變量來解決此,並從控制器做+1步:

class Account < ActiveRecord::Base 

    before_create :build_dependencies 

    def assign_params_from_controller(params) 
    @params = params 
    end 

    def build_dependencies 
    # use nifty params to build this related object 
    build_nifty_object(@params) 
    end 

在控制器:

def Create 
    account = new Account(params) 
    account.assign_params_from_controller(...) 
    account.save # this will trigger before_create 
    end 
+0

嗯..問題:我將如何應用'assign_params_from_controller(params)'? – Trip

+1

在您的控制器中,您在保存帳戶實例之前調用它。 – Matzi

+0

我剛剛意識到這是行不通的,因爲模型中的方法只適用於特定的對象。由於這將是before_create,我想不出一種使其成爲全球性的方法。 – Trip

2

我相信主動記錄回調週期疼你在大多數情況下,這包括在內。我建議您使用一個服務對象來協調Account和nifty-object的創建,而不是使用before_create。

我假設你想讓漂亮的對象知道這個帳戶,所以我把它傳遞給它的create方法。

class CreatesAccount 
    def self.create(params) 
    account = Account.new(params) 
    return account unless account.valid? 
    ActiveRecord::Base.transaction do 
     account.save! 
     NifyObject.create(params, account: account) 
     return account 
    end 
    end 
end 
1

我很感謝大家的回答。但我終於用attr_accessor代替。通過這種方式,它不會在任何地方保存任何內容,但仍可通過before_create方法從模型中訪問。

相關問題