Rails - 如何在提交form_tag时调用方法?

时间:2014-12-30 00:44:00

标签: ruby-on-rails ruby forms

我有一个Rails控制器,其中包含newcreate的方法。这是我的主要表格,我知道这些行为是如何运作的。

我还使用较小的一个字段形式创建了另一个视图。如果用户点击此表单上的提交,我想执行操作。

我创建了一个包含get和post动作的路线

match "/redemption", to: "accounts#redemption", via: [:get, :post]

在我的accounts#new操作中,用户可以购买帐户。他们会获得兑换码。

我决定制作一个新视图,如果他们已经有了代码,他们就可以输入。

逻辑对我来说相当容易,但我需要知道如何对此进行操作。

这是表单,我想在

上执行操作
<%= form_tag('/redemption') %>

  <%= label_tag 'Enter your Redemption Code' %>
  <%= text_field_tag 'Redemption Code' %>

<%= submit_tag("Redeem") %>

我不确定如何做到这一点,因为它并不涉及新的和创建动作。它们保留用于不同的目的。

2 个答案:

答案 0 :(得分:1)

您需要让表单声明一个块并将提交标记放在其中。这将使按钮发布到您的兑换操作。然后你就像正常一样访问params哈希。

<%= form_tag('/redemption') do  %>

  <%= label_tag 'Enter your Redemption Code' %>
  <%= text_field_tag :redemption, 'Redemption Code' %>
  <%= submit_tag("Redeem") %>
<% end %> 

然后在你的AccountsController

def redemption
  call_redeem_action params[:redemption] 
end 

如果您愿意,也可以为路线命名..

match "/redemption", to: "accounts#redemption", via: [:get, :post], as: :redemption 

然后你的表格将是

<%= form_tag redemption_path do  %>

我觉得更容易,因为如果你需要重命名uri,你可以在一次调整它。

答案 1 :(得分:0)

submit_tag调用form_for指定的操作,如果未指定任何操作,则默认为当前操作,在这种情况下是“赎回”#39; Doon在下面说明。所以使用:action =&gt; &#39;你的行动&#39;可能会更清楚。更多信息here