0

有点卡在这个上,因为我发现了很多信息,但似乎没有一个有效。

用户可以从两个屏幕之一、客户索引或主屏幕编辑客户。我希望更新将他们发送回他们单击编辑按钮的屏幕。

  • 我发现听起来很完美的第一件事是:redirect_to :back
  • 第二件事似乎是这样的:request.refererrequest.env['HTTP_REFERER']

这两种“解决方案”都只是再次加载编辑屏幕,并没有将用户送回索引屏幕或主屏幕。

这是我的更新定义:

def update
  @client = Client.find(params[:id])
  if @client.update_attributes(params[:client])
    redirect_to clients_path, notice: "#{@client.name} (#{@client.company}) was successfully updated."
  else
    render action: "edit"
  end
end

我究竟做错了什么?

4

1 回答 1

0

终于到了这个底部。

:back并且request.referer按预期工作 - 例如从编辑表单传递到控制器,编辑表单当然推荐人。因此,我需要在包含引用 URL 的表单上设置一个隐藏字段。

我将此添加到我的部分表单中:<%= hidden_field_tag :referrer, request.referer %>

我使用hidden_field_tag了所以我只有一个名为referrer的变量,我不希望它在任何数组中都是由基于模型名称等的简单表单创建的

然后在控制器中我添加了redirect_to params[:referrer]瞧!,一切都是一种享受。

我现在可以单击主页上的编辑按钮,一旦保存,我就会回到主页,或者如果我单击索引页面上的编辑按钮,我就会回到那里,简单!

NB - 轻微的安全问题。我最终可能会在隐藏字段标记中发送一个变量,然后在控制器内解释该变量。例如,referrer 值 1 进入主页,值 2 进入索引。我认为这更“安全”,因为这两个选择是我明确设置的路径。稍后我会对其进行排序并在需要时更新它!

于 2013-03-02T03:54:49.367 回答