ruby-on-rails 如何在保存对象时合并URL参数和主体POST参数

wkftcu5l  于 2022-11-19  发布在  Ruby
关注(0)|答案(1)|浏览(118)

我将parent_id附加到表单页面的URL(当它从我的应用程序中的现有' block '页面链接时)
然后,在创建新的block时提交该表单的输入(这将创建一个'child block',URL中包含parent_id
但当我试着用这个来保存时:

def create
    @block = Block.new(block_params)

    if @block.save
      redirect_to @block
    else 
      render :new, status: :unprocessable_entity
    end
  end

其中block_params为:

private 
    def block_params
      params.require(:block).permit(:title, :body, :parent_id)
    end

它只保存:title:body参数,而忽略URL中的:parent_id
如果我尝试手动合并它们,例如

def create
        @block = Block.new(block_params, parent_id: [parent_id)

我得到'params should be between 0...1'的错误(这是有意义的)
我错过了什么,为什么这是不保存URL参数以及?

编辑

此处为模型详细信息

class Block < ApplicationRecord
    belongs_to :parent, class_name: 'Block', foreign_key: :parent_id, optional: true
    has_many :children, class_name: 'Block', foreign_key: :parent_id
    validates :title, presence: true
    validates :body, presence: true, length: { minimum: 10 }
end
tzdcorbm

tzdcorbm1#

可以使用parameter merge method组合参数
@block = Block.new(block_params.merge(parent_id: params[:parent_id))

相关问题