Rails如何通过将form_for放在.each循环中来获得多个表单?

时间:2013-05-17 05:49:16

标签: ruby-on-rails ruby ruby-on-rails-3

我有一个页面,其中列出了用户拥有的一堆贷款,我想在这些表格中找到一个表格标签,因为他们可以对列出的任何贷款进行付款。

这就是我所犯的错误“未定义方法'贷款'......”

<% @loans.each do |loan| %>

    <% form_for loan add_payment_payment_path(loan) , :method => :post do |f| %>                                       
        <%= f.text_field :amount, :placeholder => 'Amount' %>
        <%= f.submit 'Make Payment', :class => 'btn btn-primary'%>
    <% end %>

<% end %>

如何在@loans.each循环中拥有动态form_for?

2 个答案:

答案 0 :(得分:4)

form_for来电不正确,应该是:

<% form_for loan, url: add_payment_payment_path(loan), method: :post do |f| %>

您在loan之后错过了逗号,因此它被解释为以add_payment_payment_path(loan)为参数的方法。

另请注意,将网址传递给form_for是通过选项哈希使用:url密钥完成的。它不是一个单独的参数,因此传递它会导致wrong number of arguments (3 for 2)错误。

答案 1 :(得分:1)

form_for方法中有两个语法错误。您在贷款后遗失了一个逗号,并且在add_payment_payment_path(贷款)之后您还有一个额外的空格

<% form_for loan add_payment_payment_path(loan) , :method => :post do |f| %>

将此更改为

<% form_for loan, add_payment_payment_path(loan), :method => :post do |f| %>

在大多数情况下,在Ruby括号中记住是可选的,但是,您必须只保留一个空格。这是带括号

的form_for方法
<% form_for(loan, add_payment_payment_path(loan), :method => :post) do |f| %>