如何找到@object然后复制@object?

下面的代码预先填充了一个新的_form ,但是一旦用户保存表单,它将更新旧的Inspiration而不是创建新的Inspiration

调节器

  def new if params[:inspiration_id] @inspiration = Inspiration.find(params[:inspiration_id]) @inspiration = current_user.inspirations.build # Is there a way to find and then build? else @inspiration = current_user.inspirations.build end end 

路径

 new_inspiration_path(inspiration_id: inspiration.id) 

我们怎样才能将@inspiration首先用于Inspiration.find(params[:inspiration_id])然后再使用current_user.inspirations.build

如果找到,您可以在现有记录上使用dup方法。 例如

 existing_inspiration = Inspiration.find_by_id params[:inspiration_id] if existing_inspiration @inspiration = existing_inspiration.dup else @inspiration = current_user.inspirations.build end 

您的灵感更新的原因是因为它是一个持久的记录。 您可以提取除id之外的所有属性并实例化新的灵感。

 original = Inspiration.find(params[:inspiration_id]) @inspiration = Inspiration.new(original.attributes.except("id")) 

我假设你想创建一个灵感的副本,以便预先填充一些字段。 根据您的具体要求,复制灵感可能是也可能不是一个好主意(引用其他对象,权限/访问权限……)

我不是100%的用例,因为您通常不会将ID传递给new操作。 但是,如果需要基于原始对象的所有属性的新对象,则可以检出克隆 。

我建议你重定向到编辑动作,而不是去跟随rails CRUD结构的新动作。 如果您需要更多,请告诉我。