0

定期的なレビューリソースがあるとします。私が必要としているのは、ユーザーが新しいperiodic_reviewフォームにアクセスすると、日付フィールドを除く最後のperiodic_reviewフィールドがフォームフィールドに入力されることです。(フィールドがdaily_reviewごとにそれほど変化しないことを想像してください)。私はコントローラーにこれを持っています:

  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

日付より下=nilですが、クラッシュします。

idフィールドを使用していない場合、フォームはそれが更新であるか作成であるかをどのように知るのですか?

4

2 に答える 2

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)

オブジェクトのクローンを作成するよりも明確だと思います。

于 2012-08-09T16:31:30.220 に答える
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
于 2012-08-09T16:14:21.220 に答える