0

我有一个创建(和更新)材料的导轨表单。显然,默认情况下,当用户登录并检索材料时,表单会呈现更新操作。但是,我希望有一个“另存为”操作,以防用户想要保存另一个版本的材料。显而易见的方法是在控制器中设置一个发送到“更新”的按钮,另一个发送到“新”的按钮,但我不知道如何执行此操作,因为它似乎取决于 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 

但这不起作用。这是一个可行的策略还是很疯狂?

4

1 回答 1

0

你可能可以用一些 jquery 来做到这一点。

假设您正在处理的模型称为电子邮件。当您编辑电子邮件时,使用创建的表单标签具有操作action='/emails/:id和方法method='post'。隐藏在表单标签下面的是

<form accept-charset="UTF-8" action="/email/1" method="post">
  <div style="margin:0;padding:0">
    <input name="_method" type="hidden" value="put" />
    <input name="utf8" type="hidden" value="&#x2713;" />
    <input name="authenticity_token" type="hidden" value="f755bb0ed134b76c432144748a6d4b7a7ddf2b71" />
  </div>

更多信息可以在这里找到:http: //guides.rubyonrails.org/form_helpers.html#how-do-forms-with-put-or-delete-methods-work

额外的代码块使表单提交了一个 put 请求而不是一个 post,它随后映射到控制器的更新操作。要让它将表单发送到创建操作,您需要发布操作“/email”。换句话说,你想将上面的代码操作成类似

<form accept-charset="UTF-8" action="/email" method="post">

注意删除 div 标签。

所以我的建议是创建一个“另存为”按钮,然后添加一些 jquery,当单击“另存为”按钮时,它会进行这些修改。

这个 stackoverflow 答案可能会帮助您使用 jquery Jquery 来更改表单操作

于 2013-03-06T06:46:42.680 回答