一个表单只会提交一个动作。
使用 i18n 定义按钮文本,然后检查控制器操作中提交参数的 i18n 值
例如在你的表格中
<%= submit_tag I18n.t('checkout.button.place_order'), :class => "submit" %>
这同样适用于 f.submit 按钮。
然后在你的控制器中
if params[:commit] == I18n.t('checkout.button.place_order')
Do something
else
Do something else
end
在您的 en.yml 或任何定义实际文本的内容中
en:
checkout:
button:
place_order: 'Place Order'
显然只是调整以满足您的需求
通过使用 i18n,您可以轻松更改 i18n 定义中按钮上的文本,而不会影响您的控制器逻辑,并且仍然可以处理您希望使用的任何国际化/翻译
使用它,您可以在单个表单上设置任意数量的按钮,然后在控制器操作中添加您需要的任何条件逻辑
更新
I18n 是国际化的缩写(单词中有 18 个字符 :)),只需在名为 en.yml 的语言环境文件夹中创建一个文件,然后以我上面描述的格式定义您需要的任何内容,您就可以开始了。使用 t 在任何需要它们的地方引用 I18n 变量。helper 看看这个 railscast 以获得更详细的解释
http://railscasts.com/episodes/138-i18n
更新 2回应 mu is too short 的评论如下
为什么不只添加一个名称属性?然后您可以使用独立于其内容的按钮。请记住,a 可以包含嵌入的 HTML,这在 param 中没有多大意义
使用 i18n 会使该注释完全无效,因为根本不检查文本。你可以随心所欲地制作文本,使用 I18n 确实是一个好习惯。请注意,在上面的示例中,您正在检查控制器“checkout.button.place_order”中的常量,而不是定义为“Place Order”的值。