我在Ruby on Rails 4上有应用程序。我有控制器从客户端接收数据并创建批量对象。因此,如果来自这些对象的数据是正确的,并且不应创建其他(无效)对象并将其返回给客户端以进行进一步修复,则可以创建和存储一些对象。
我的模型类(包含名称和日期):
class Person < ActiveRecord::Base
validates :name, presence: true
validates :date, presence: true
end
我的控制器:
PersonsController
def create_multiple
valid_persons = []
invalid_persons = []
all_persons_params = get_all_persons_params #just extract it from params
all_persons_params.each.do |one_person_params|
person = Person.new one_person_params
if person.valid?
valid_persons << person
else
invalid_persons << person
end
end
process_valid_persons #store them
process_invalid_persons invalid_persons #redirect to persons modifications page to make user to fix errors (if !invalid_persons.empty?)
end
def process_invalid_persons (invalid_persons)
flash[:invalid_persons] = invalid_persons
redirect_to ...
end
end
最后,我尝试在我的视图中显示错误:
<%
@invalid_persons.each do |invalid_person|
invalid_person.errors
end
%>
我在#Hash中的未定义的方法`错误'的第invalid_person.errors
行收到错误:0x007f99d0ca2788
所以如果它的参数无效并且ruby返回哈希映射而不是对象,那么它就无法创建对象。那么有没有办法在无效的params案例中创建对象?并获得验证错误以向用户显示它们?
THX