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
相关产品推荐
相关产品推荐

