[英]Is there a way to validate and save an array of objects in ruby on rails' ActiveRecord?
我想将一个事件保存到数据库中,该事件包含一个门票数组,其中实习生包含带有门票信息的对象,如下所示
这些是我验证参数的功能
def event_params
params.require(:event).permit(:title, :description, :event_type, :category_id, :county_id, :web_url, :venue_url, :venue_name, :poster, :video_url, :start_date, :end_date, :published_date, :is_private, :status, :age_limit)
end
def ticket_params
params.require(:event).permit(tickets: [:name, :price, :quantity, :detail, :status])
end
这就是我创建活动和门票的方式
def create
@event = Event.new(event_params.merge(user_id: current_user.id))
if @event.save
ticket_params[:tickets].each do |ticket|
@event.tickets.create(ticket)
end
render json: @event.to_json(include: :tickets), status: :created
else
render json: @event.errors, status: :unprocessable_entity
end
end
似乎event_params[:tickets]
下没有嵌套数组。 在您的 controller 中使用debugger
来查看原因。
在上述答案中使用@installero 推荐的调试器后,我注意到,当我链接验证时,tickets_params[:tickets] 为零,但是当我将它们分开时,它起作用了
def ticket_params
params.require :tickets
params.permit :tickets => [:name, :price, :quantity, :detail, :status]
end
但@masroor 在评论中推荐的最佳方法是根据此文档在事件model 中包含 accept_nested_attributes_for accepts_nested_attributes_for:tickets
然后将门票参数重命名为tickets_attributes
json 参数
{
"title": "Goatfest Live Music Festival 2022",
"event_type": "Festival",
...
"tickets_attributes": [
{
"name": "WIP",
"price": 100,
...
},
{
"name": "Sit",
"price": 50,
...
}
]
}
验证 function
def event_params
params.require(:event).permit(:title, :event_type, tickets_attributes: [:name, :price])
end
最后,创建动作
def create
@event = Event.new(event_params.merge(user_id: current_user.id))
if @event.save
render json: @event.to_json(include: :tickets), status: :created
else
render json: @event.errors, status: :unprocessable_entity
end
end
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.