当我在创建表单中保存PayerContract时,它会保存PayerContract并创建“您创建的PayerContract {X}成功”,其中{X}是PayerContract名称,并将用户重定向回索引。我想允许用户点击{X}转到该PayerContract的编辑页面。
在我的索引页面中,我有:
= link_to t('payer_contracts.edit'), edit_payer_contract_path())
我需要将PayerContract.id提供给edit_payer_contract_path函数。所以,它看起来像edit_payer_contract_path(330)
我在控制器中显示的警告信息是:
def create
payer_contract_params = PayerContract.assign_params_to_payer_contract(params)
@payer_contract = PayerContract.new(payer_contract_params)
respond_to do |format|
begin
if @payer_contract.save
format.html { redirect_to payer_contracts_path, notice: t('common.successfully_created', entity: @payer_contract.description) }
end
end
end
end
我发现当我做的事情时:
edit_payer_contract_path(PayerContract.find())
它返回所有看起来像的PayerContract:预期属性Hash,得到[{"id"=>224, "name" ="hello", "id"=> 332, "name" = "hello2", "id"=>555, "name" = "sup" }]
等。
如何正确地将用户链接到刚刚创建的PayerContract?
答案 0 :(得分:0)
你可以有两种方式。沿着redirect_to
方法传递参数。显然,传递新创建的PayerContract的id。这样您就可以在params
中获得ID,并且可以在link_to
方法中使用它。
如果您不想传递参数,请在成功创建PayerContract后尝试将新创建的PayerContract存储在会话中。这种方式在重定向后,您仍然可以访问会话中保存的值 类似下面的内容
def create
@foo = Foo.new(foo_params)
if foo.save
session[:foo_id] = @foo.id
redirect_to foo_path
end
end
答案 1 :(得分:0)
正如beniutek所说,你可以在redirect_to中传递参数。但是当用户第一次访问索引页面id没有定义时,您可以在视图中检查是否定义将id设置为link_to,如下所示。
def create
payer_contract_params = PayerContract.assign_params_to_payer_contract(params)
@payer_contract = PayerContract.new(payer_contract_params)
respond_to do |format|
begin
if @payer_contract.save
format.html { redirect_to payer_contracts_path(id: @payer_contract.id), notice: t('common.successfully_created', entity: @payer_contract.description) }
end
end
end
end
在视图中
if params[:id].present?
= link_to t('payer_contracts.edit'), edit_payer_contract_path(params[:id].to_i))