2012-08-09 51 views
0

假設我有periodic_review資源。我需要的是,當用戶轉到新的periodic_review表單時,除了日期字段外,表單字段將填充上次的periodic_review字段。 (想象這些字段不會從一個daily_review變到另一個)。我有這個控制器上:使用非空白字段form_for創建新視圖

def new 
    @periodic_review = PeriodicReview.where(user_id: @user_id).order("revision DESC").first 
    @periodic_review.date = nil 
    end 

這對視圖:

<%= form_for(@periodic_review) do |f| %> ... 

現在的問題是,由於得到的form_for一個非空@periodic_review,它會產生一個更新的形式,而不是創建表單,從而在提交時將用戶發送到更新。我試過了:

@periodic_review.id = nil 

下面的日期=零,但它崩潰。

如果表單沒有使用id字段,它是如何知道是更新還是創建?

回答

1
# rails < 3.1 
new_record = old_record.clone 

#rails >= 3.1 
new_record = old_record.dup 

我你的代碼,用於軌道> = 3.1,

@periodic_review = PeriodicReview.where(user_id: @user_id).order("revision DESC").first.dup 
1

我的方式做到這一點:

last_periodic_review = PeriodicReview.where(user_id: @user_id).order("revision DESC").first 
options = last_periodic_review.attributes.merge({ date: nil }) 
@periodic_review = PeriodicReview.build(options) 

我認爲這是再清楚不過了克隆對象。