未定义的方法`model_name'对于模块:类

时间:2014-08-18 22:59:12

标签: ruby-on-rails-4

我有一个form_for并不是要初始化一个对象,而只是传递表格数据来处理网络支付。

我被建议form_for ActiveModel作为执行此操作的方法。

它工作正常一段时间但突然间我收到以下错误:

undefined method `model_name' for Module:Class

在这一行上被调用:

  <%= form_for ActiveModel do |f| %>

在我的application/pay.html.erb文件中。

以下是完整档案:

<%= form_for ActiveModel do |f| %>
  <%= f.label :first_name %>
  <%= f.text_field :first_name, params[:first_name] %><br />

  <%= f.label :last_name %>:
  <%= f.text_field :last_name, params[:last_name] %><br />


  <%= f.label :card_number %>:
  <%=f.text_field :card_number, params[:card_number] %><br />


  <%= f.label :expiration_date %>:
  <%= f.text_field :expiration_date, params[:expiration_date] %><br />


  <%= f.label :cvv2_cvc2 %>:
  <%= f.text_field :cvv2_cvc2, params[:cvv2_cvc2] %><br />

  <%= f.submit %>
<% end %>

2 个答案:

答案 0 :(得分:1)

我认为你误解了。

ActiveModel是一个可以包含在模型类中的模块。

调用form_for时,您应该引用包含ActiveModel的类的实例,例如

form_for(@article) do |f|
Rails使用

model_name来确定模型的名称,因此提交按钮将显示“更新文章”或“创建文章”。

答案 1 :(得分:1)

如果您只想将数据传递给控制器​​,那么您应该使用form_tag帮助器。

form_for自动将表单数据与&#34;表单用于&#34;的模型对象的属性相关联。例如

<%= form_for @payment do |f| %>
    <%= f.label :credit_card_number %>
    <%= f.text_field :credit_card_number %>

    <%= f.submit %>
<% end %>
单击提交按钮时,

会自动将字段:credit_card_number映射到@ payment.credit_card_number。实际上,提交按钮将表单数据POST到create操作,并将其保存到数据库中。但是,如果您不想保存此数据,并且只需暂时将其传递到其他地方,请使用表单标记。

表单标记将表单数据传递给params哈希,如下所示:

<%= form_tag({controller: payment_processor, action: pay} ,method: HTTP_VERB) %>
    <%= label_tag :credit_card_number %>
    <%= text_field_tag :credit_card_number %>

    <%= submit_tag %>
<% end %>

提交后,此表单将调用您在form_tag之后指示的控制器的操作,并将表单中的数据通过params散列传递给控制器​​params[:credit_card_number]

总之,form_for专门用于将表单数据保存为模型的实例(即将信息放入数据库中),而form_tag可用于将任何数据传递给控制器通过params哈希。

您可以在导轨指南中阅读有关所有这些here的更多信息。希望这有帮助!