由于格式错误,控制器未在 Rails 中建立关联

Controller not making associations in Rails because of wrong format

我需要为 Modification 模型 if.save 建立新的关联。此外,这些关联需要与相关的 Entity 模型相同。但我收到此错误:

When assigning attributes, you must pass a hash as an argument.

ModificationController.rb

def create
    @modification = Modification.new(change_params)

    respond_to do |format|
      if @modification.save

        @modification.entity.boxes.each do |d| 
          @modification.boxes.new(d)
        end

        flash[:success] = "Success"
        format.html { redirect_to @modification }
        format.json { render :show, status: :created, location: @modification }
      else
        format.html { render :new }
        format.json { render json: @modification.errors, status: :unprocessable_entity }
      end
    end
  end

更多信息:

每个Modificationbelongs_toEntity ModificationsEntities has_many Boxes.

当你声明一个has_many关联时,声明class会自动获得与关联相关的16个方法作为提及Guide Ruby On Rails Association Has-Many

  def create

    @modification = Modification.new(change_params)
    respond_to do |format|
      if @modification.save

        @modification.entity.boxes.each do |d| 
          @modification.boxes << d # if d.present? use if condition there is nay validation in your model.
        end

        flash[:success] = "Success"
        format.html { redirect_to @modification }
        format.json { render :show, status: :created, location: @modification }
      else
        format.html { render :new }
        format.json { render json: @modification.errors, status: :unprocessable_entity }
      end
    end
  end

希望这篇文章能帮到你!!!

所以您想使用现有的 Box 创建一个新的框关联。我们可以获取现有框的属性来创建新框。然而,一个现有的框已经有一个 id,所以我们需要从属性中排除它。

按照上述逻辑,以下应该有效:

def create
  @modification = Modification.new(change_params)

  respond_to do |format|
    if @modification.save

      @modification.entity.boxes.each do |d| 
        @modification.boxes << d.dup
      end

      flash[:success] = "Success"
      format.html { redirect_to @modification }
      format.json { render :show, status: :created, location: @modification }
    else
      format.html { render :new }
      format.json { render json: @modification.errors, status: :unprocessable_entity }
    end
  end
end