从rails

时间:2016-03-08 21:04:34

标签: ruby-on-rails ruby

当我在创建表单中保存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?

2 个答案:

答案 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))