You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rails 7:从索引页调用create方法创建Document并跳转至编辑页

解决方案

1. 修正Controller中的Create方法

你的create方法存在两处关键问题:

  • Document.new(document_params{params[:user_id]})语法错误,document_params是参数过滤方法,不能用这种方式传递额外参数
  • 创建成功后当前跳转至show页面,不符合你跳转到编辑页的需求

修正后的代码如下:

def create
  @document = Document.new(document_params)

  respond_to do |format|
    if @document.save
      flash[:notice] = "Document créé avec succès."

      # Turbo Stream场景:可保留页面更新逻辑,或直接重定向
      format.turbo_stream do
        render turbo_stream: [
          turbo_stream.append("documents", partial: "documents/document", locals: { document: @document }),
          turbo_stream.update("content-d", partial: "documents/table"),
          turbo_stream.replace("notice", partial: "layouts/flash")
        ], status: :see_other
        # 若无需更新页面,可替换为直接重定向:
        # redirect_to edit_document_path(@document), notice: "Document créé avec succès."
      end
      # HTML格式直接跳转到编辑页
      format.html { redirect_to edit_document_path(@document), notice: "Document was successfully created." }
      format.json { render :show, status: :created, location: @document }
    else
      # 跳过new页面,重定向回索引页并提示错误
      format.html { redirect_to documents_path, alert: "Erreur lors de la création du document : #{@document.errors.full_messages.join(', ')}", status: :unprocessable_entity }
      format.json { render json: @document.errors, status: :unprocessable_entity }
    end
  end
end

def document_params
  params.fetch(:document, {}).permit(:doc_type, :number, :name, :total_ttc, :user_id)
end

2. 确认Button_to的正确性

你更新后的button_to代码是正确的,参数已嵌套在:document键下,能被document_params正确捕获:

<%= button_to "Edite", { controller: "documents", action: "create", document: { name: "doc_name", user_id: current_user.id } }, method: :post, class: "btn-primary" %>

若需要动态设置文档名称,将"doc_name"替换为对应动态变量即可。

3. Turbo场景适配(可选)

如果使用Turbo,可根据需求选择两种处理方式:

  • 保留Turbo Stream的页面更新逻辑,同时通过status: :see_other触发后续跳转
  • 直接在Turbo Stream响应中重定向到编辑页,跳过页面更新操作

4. 额外验证(可选)

确保current_user.id可正常访问,且Document模型允许赋值user_id(比如存在belongs_to :user关联且无赋值限制)。

内容的提问来源于stack exchange,提问作者Bllfngr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 07:24:23