我有一个文档模型,我希望通过单击从索引页发送一些参数的按钮来创建文档。 我想在"新">页面中传递这个
。 我确切地想做的是:我单击按钮,使用传递的参数创建我的模型,然后重定向到编辑页面以自定义此文档
在我的索引视图中,我使用此按钮:<%= button_to "Edit", {:controller => "documents", :action => "create", :name=>"doc_name", :user_id=> current_user.id}, :method=>:post%>
在我的document_controller里,我有这个:
def create
@document = Document.new(document_params{params[:user_id]})
respond_to do |format|
if @document.save
flash.now[:notice] = "Document créé avec succès."
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")]
end
format.html { redirect_to document_path(@document), notice: "Document was successfully created." }
format.json { render :show, status: :created, location: @document }
else
format.html { render :new, 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
有人可以指导我这样做吗?
谢谢大家
<小时 />更新
我只是为此更改了button_to:
<%= button_to "Edite", {:controller => "documents", :action => "create", :document=>{:name=>"doc_name", :user_id=> current_user.id}}, :method=>:post, class:"btn-primary" %>
如果我理解正确,您希望:
- 单击按钮
- 创建新文档
- 被重定向到该新文档的"编辑"视图
如果你永远不需要降落在DocumentsController#new
上,那么你可以让DocumentsController#new
的最后行动来redirect_to
DocumentsController#edit
那个document
。
如果要保留DocumentsController#new
的正常角色,只需创建一个新的路由和控制器操作,例如DocumentsController#create_from_index
然后,您可以在索引页面上有一个表单(带有提交按钮),该表单将发布到您的新路由。
使用表单是最简单的方法。如果你不想使用表单,你需要将按钮数据AJAX到控制器操作,这有点复杂(但仍然非常可行)
例如:
# routes
Rails.application.routes.draw do
resources :documents do
collection do
post 'create_from_index'
end
end
end
# documents_controller
class DocumentsController < ApplicationController
...
def index
# do your index stuff here
@new_document = Document.new
end
def create_from_index
# get the params from the form submission (or AJAX request)
if Document.create(document_params)
# successful creation
redirect_to action: :edit
else
# do something about errors
render :index
end
end
end