0

假设我有一个periodic_review 资源。我需要的是,当用户进入新的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

我是你的代码,对于 rails >= 3.1,

@periodic_review = PeriodicReview.where(user_id: @user_id).order("revision DESC").first.dup
于 2012-08-09T16:14:21.220 回答