繁体   English   中英

有没有办法在 Rails 的 ActiveRecord 上验证和保存 ruby 中的对象数组?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM