fields_for,formtastic,ActiveMerchant和验证错误

时间:2010-08-20 19:17:44

标签: ruby-on-rails ruby formtastic activemerchant

我正在尝试使用Formtastic来创建付款表单,因为我想使用内联错误。我正在使用ActiveMerchant来处理结算。我有以下表格:

<%= semantic_form_for @payment do %>
  <%= form.inputs do %>
    <%= form.input :email, :label => "Email Address" %>

    <%= form.semantic_fields_for :credit_card_attributes do |cc| %>
      <%= cc.input :number, :label => "Credit Card Number" %>  
      <%= cc.input :first_name, :label => "First Name" %>
      <%= cc.input :last_name, :label => "Last Name" %>
      <%= cc.input :month, :label => "Expiration Month" %>
      <%= cc.input :year, :label => "Expiration Year" %>
      <%= cc.input :verification_value, :label => "Verification Code" %>
    <% end %>
  <% end %>
<% end %>

这就是我Payment模型中的内容:

class Payment < ActiveRecord::Base
  validates_associated :credit_card, :on => :create

  def credit_card_attributes=(attrs)
    @credit_card = ActiveMerchant::Billing::CreditCard.new(attrs)
  end

  def credit_card
    @credit_card
  end
end

当我提交无效的信用卡时,它会发现它无效,但我没有收到任何来自formtastic的内联错误。

我认为这里可能有一些简单的东西,我只是不确定是什么。

这是在Rails 3上。

1 个答案:

答案 0 :(得分:1)

我不确定这是你想要的,但尝试添加此代码(从client_side_validations gem获取)

ActionView::Base.field_error_proc = Proc.new do |html_tag, instance|
  unless html_tag =~ /^<label/
    %{<div class="field_with_errors">#{html_tag}<label for="#{instance.send(:tag_id)}" class="message">#{instance.error_message.first}</label></div>}.html_safe
  else
    %{<div class="field_with_errors">#{html_tag}</div>}.html_safe
  end
end
某些初始值设定项中的

(例如 config / initializers / form_errors.rb

至于Formtastic,我真的不喜欢这个宝石(但这是另一个故事)