【问题标题】:Why is my controller calling update, not create, after new为什么我的控制器在新建后调用更新而不是创建
【发布时间】:2012-11-28 10:10:19
【问题描述】:

当我转到new_heuristic_variant_cycle_path 时,我的应用程序会显示循环的新视图,但表单上的提交按钮显示的是“更新循环”而不是“创建循环”,当您单击提交按钮时,控制器会寻找更新动作。为什么?

我有……

/config/routes.rb:

Testivate::Application.routes.draw do
  resources :heuristics do
    resources :variants do
      resources :cycles
    end
  end
end

/app/models/heuristics.rb:

class Heuristic < ActiveRecord::Base
  has_many :variants
  has_many :cycles, :through => :variants
end

/app/models/variants.rb:

class Variant < ActiveRecord::Base
  belongs_to :heuristic
  has_many :cycles
end

/app/models/cycles.rb:

class Cycle < ActiveRecord::Base
  belongs_to :variant
end

/app/views/cycles/new.html.haml:

%h1 New Cycle
= render 'form'

/app/views/cycles/_form.html.haml:

= simple_form_for [@heuristic, @variant, @cycle] do |f|
  = f.button :submit

/app/controllers/cycles_controller.rb:

class CyclesController < ApplicationController
  def new
    @heuristic = Heuristic.find(params[:heuristic_id])
    @variant = @heuristic.variants.find(params[:variant_id])
    @cycle = @variant.cycles.create
    respond_to do |format|
      format.html # new.html.erb
    end
  end
  def create
    @heuristic = Heuristic.find(params[:heuristic_id])
    @variant = @heuristic.variants.find(params[:variant_id])
    @cycle = @variant.cycles.create(params[:cycle])
    respond_to do |format|
      if @cycle.save
        format.html { redirect_to heuristic_variant_cycles_path(@heuristic, @variant, @cycle), notice: 'Cycle was successfully created.' }
      else
        format.html { render action: "new" }
      end
    end
  end
end

【问题讨论】:

    标签: ruby-on-rails simple-form


    【解决方案1】:

    在你的控制器中,这行代码是错误的:

    @cycle = @variant.cycles.create
    

    应该是这样的:

    @cycle = @variant.cycles.build
    

    当您拨打create 时,记录被保存。在文档中:

    collection.build(attributes = {}, ...)

    返回一个或多个集合类型的新对象,这些对象已经用属性实例化并通过外键链接到该对象,但尚未保存。

    collection.create(attributes = {})

    返回一个集合类型的新对象,该对象已经用属性实例化,通过外键链接到该对象,并且已经保存(如果它通过了验证)。注意:这仅适用于数据库中已存在基本模型的情况,而不是新的(未保存的)记录!

    【讨论】:

      猜你喜欢
      • 2023-01-27
      • 2013-10-02
      • 1970-01-01
      • 1970-01-01
      • 2021-04-22
      • 2022-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多