【发布时间】:2013-03-05 22:18:11
【问题描述】:
我有一个创建(和更新)材质的 rails 表单。显然,默认情况下,当用户登录并检索材料时,表单会呈现更新操作。但是,我希望有一个“另存为”操作,以防用户想要保存另一个版本的材料。这样做的明显方法是在控制器中设置一个发送到“更新”的按钮,另一个发送到“新”的按钮,但我不知道如何执行此操作,因为它似乎取决于 form_for 参数。
更新
为避免使用 Javascript,我尝试将 form_for url 更改为:
<%= form_for @material, :url => choose_action_path do |f| %>
然后在我的控制器中:
def choose_action
if params[:save_as] == "Save As"
redirect_to :action => "create"
else
redirect_to :action => "update"
end
end
但这不起作用。这是一个可行的策略还是很疯狂?
【问题讨论】:
-
听起来是个坏主意。仅在服务器端适当地处理表单怎么样?您可以从一个控制器委托到您需要的任何地方。这种形式在浏览器中太容易弄乱了。
-
您可以添加一个复选框以了解用户是要创建新版本还是保存实际版本。而在服务器端,只需检查复选框是否已被选中并委托给适当的方法。
-
通过重定向您会丢失从表单中发布的所有数据。所以你的
choose_action想法确实是疯狂。 -
@Mischa 是的,我很担心。有没有办法将数据传递给下一个动作?