Ruby on rails 为什么我的Rails自定义验证器不能工作?

Ruby on rails 为什么我的Rails自定义验证器不能工作?,ruby-on-rails,validation,Ruby On Rails,Validation,我正在创建一个商店,允许用户购买贺卡生日快乐,情人节 我有两种型号:卡片和收信人 准材料 我没有接受者控制器,但我想我不需要 我想在购买卡的表单中验证收件人模型中的字段 我已经尝试验证与之关联的\u并添加我自己的验证程序。我只需要验证我的收件人客户信息。因为您从未保存@card,请检查您的创建操作并尝试查找问题。此代码有很多错误:1看起来您使用的是嵌套属性,但嵌套属性不适用于属于关系。2在您的示例3 if card.save而不是@card.save4中,没有接受嵌套的属性。我在card_参数中

我正在创建一个商店,允许用户购买贺卡生日快乐,情人节

我有两种型号:卡片和收信人

准材料

我没有接受者控制器,但我想我不需要

我想在购买卡的表单中验证收件人模型中的字段


我已经尝试验证与之关联的\u并添加我自己的验证程序。我只需要验证我的收件人客户信息。

因为您从未保存@card,请检查您的创建操作并尝试查找问题。此代码有很多错误:1看起来您使用的是嵌套属性,但嵌套属性不适用于属于关系。2在您的示例3 if card.save而不是@card.save4中,没有接受嵌套的属性。我在card_参数中发现另一个无效语法:recipient_attributes:[:name,:email]
class Card < ActiveRecord::Base

  belongs_to :recipient

  def valid_name
    if @recipient && @recipient.name.nil?
      @card.errors.full_messages.push("Name can't be blank")
    end
  end

  validate :valid_name
  validates_associated :recipient
  validates :recipient, presence: true
  validates :note, length: { in: 1..200 }

class Recipient < ActiveRecord::Base

  has_one :card

  validates :name, presence: true

end
def new
  @card = Card.new
  @card.build_recipient                                   
end

def create
  @card = Card.new(card_params)
  if @card.save
    flash[:notice] = "Your card was successfully added to your cart!"
    redirect_to :back
  else
    flash[:danger] = "Something was wrong"
    render 'new'
  end
end
def card_params
  params.require(:card).permit(:note, :amount, :recipient_attributes:[:name, :email])
end