因为我发现了大量的信息但是没有任何信息似乎有效。
用户可以从两个屏幕之一,客户端索引或主屏幕编辑客户端。我希望更新将它们发送回他们点击编辑按钮的屏幕。
redirect_to :back
request.referer
或request.env['HTTP_REFERER']
这两个“解决方案”只是再次加载编辑屏幕,并没有将用户发送回索引屏幕或主屏幕。
这是我的更新def:
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
我做错了什么?
答案 0 :(得分:0)
终于到了这个底层。
:back
和request.referer
按预期工作 - 例如从编辑表单传递到控制器,当然的编辑表单是然后是引用者。所以,我需要在包含引用URL的表单上有一个隐藏字段。
我将此添加到我的表单部分:<%= hidden_field_tag :referrer, request.referer %>
我使用了hidden_field_tag
所以我只有一个名为referrer的变量,我不希望它在基于模型名称等的简单形式的任何数组中
然后在控制器中添加了redirect_to params[:referrer]
和瞧!,一切都有效。
我现在可以单击主页上的编辑按钮,一旦保存,我将被带回主页,或者如果我点击索引页面上的编辑按钮,我会被带回那里,简单!
NB - 对安全性的轻微关注。我可能最终在隐藏字段标记中发送变量,然后在控制器内解释该变量。例如引用者值1转到主页,值2转到索引。我认为这更安全,因为这两个选择是我明确设定的路径。我会稍后对此进行排序并在需要时更新它!