当我使用form_tag时,为什么动作会问我两个参数

时间:2012-05-03 14:01:35

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

为什么当我试图发送这三个参数(recipients_emails)时,我得到错误:

  

FreeRegistrationCouponsController中的ArgumentError #send

     

错误的参数数量(2表示0)Rails.root:   /用户/ regedarek /代码/ wifiname

     

应用程序跟踪|框架跟踪|完整追踪   app / controllers / free_registration_coupons_controller.rbin`send'

我做错了什么?

<div class="span6">
  <b>Give three of your friends a free registration</b>
  <%= form_tag :controller => 'free_registration_coupons', :action => "send" do %>
    <%= label_tag :recipient_email_1 %>
    <%= text_field_tag :recipient_email_1 %>
    <%= label_tag :recipient_email_2 %>
    <%= text_field_tag :recipient_email_2 %>
    <%= label_tag :recipient_email_3 %>
    <%= text_field_tag :recipient_email_3 %>
    <%= submit_tag %>
  <% end %>
</div>

class FreeRegistrationCouponsController < ApplicationController
  def send
    @sender_id = current_user.id

    binding.pry
    redirect_to root_path
  end
end

resources :free_registration_coupons do
  collection do
    get 'send'
    post 'send'
  end
end

2 个答案:

答案 0 :(得分:1)

不要调用你的动作发送 - 你要覆盖核心ruby方法。 Rails试图调用这个核心ruby方法,但最终调用你的方法,它有不同的签名。

Rails可能应该使用__send__,以便您可以自由地使用send,但现在您无法做到这一点。

答案 1 :(得分:0)

尝试将表单更改为如下所示:

<div class="span6">
  <b>Give three of your friends a free registration</b>
  <%= form_tag '/free_registration_coupons/send' do %>
    <%= label_tag :recipient_email_1 %>
    <%= text_field_tag :recipient_email_1 %>
    <%= label_tag :recipient_email_2 %>
    <%= text_field_tag :recipient_email_2 %>
    <%= label_tag :recipient_email_3 %>
    <%= text_field_tag :recipient_email_3 %>
    <%= submit_tag %>
  <% end %>
</div>

我认为问题在于你的form_tag没有按照你包含它们的方式来预期参数。