【发布时间】:2022-11-22 21:12:28
【问题描述】:
我在控制器循环中创建对象。
我需要在循环开始之前检查 pet_name 数组。
(因为我得到undefined method 'each' for nil:NilClass的时候
params[:pet_name].each do |pid|) 运行)
但是我的验证总是在 User.new 或 User.create 之后调用。 我想更改为在按下提交按钮并检查验证时进行验证,并在 pet_name 数组为 nil 时重定向回来。 我可以更改我的代码吗?
控制器
def create
user_name = params[:user_name]
params[:pet_name].each do |pid|
@user = User.new
@user.name = user_name
@user.pet_name = pid
render :new unless @user.save
end
redirect_to users_path
end
用户.rb
class User < ApplicationRecord
has_many :pet
validates :name, presence: true
validates :pet_name, presence: true
validate :check_pet
def check_pet
if pet_name.nil?
errors.add(:pet_name, 'at least one pet id')
end
end
end
婴儿车结构
{ name: 'blabla', pet_name: ['blabla', 'blablabla', 'bla'] }
【问题讨论】:
-
因为您的模型中有一个默认验证和一个自定义验证。如果您只想自定义验证,请删除此“验证:宠物名称,存在:真实”。
-
@lhh 谢谢。但由于循环的 nill 错误,它仍然无法正常工作
-
@lhh 我可以在循环创建之前验证吗?
-
你想在这里实现什么?保存前是否在数组中检查任何特定值?
-
@lhh 我正在尝试在创建之前验证 params[:pet_name](数组)是否为 nil,但我只是更改为在创建之前检查参数。感谢您的帮助
标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-4