为了账号安全,请及时绑定邮箱和手机立即绑定

如何在创建操作中创建 JOIN 表并分配相关 id

如何在创建操作中创建 JOIN 表并分配相关 id

饮歌长啸 2021-12-02 19:53:02
对于房间预订,我想包括房间选项。选项及其连接表reservation_options 似乎正确插入到我的参数中,但我无法正确分配连接表的option_quantity 值。它给了我错误消息```没有将符号隐式转换为整数``由于选项是在表单中动态生成的,因为它们取决于所选的 room_type,因此我尝试在创建操作中构建它们。但是,我无法遍历参数并构建它们(请参阅为我的尝试创建操作)。参数 Parameters: {"utf8"=>"✓", "authenticity_token"=>"7QJHgdYW8ubKiNpLPET7tYzGNyqmp69dafo8NDaAUBf2PL3CI9XhKmd/am2Mo/A93EFZQByltwe2e4wepMXdqw==", "reservation"=>{"rooms"=>{"room_type"=>"185"}, "arrival"=>"2019-10-25", "departure"=>"2019-10-26", "room_id"=>"266", "reservation_contact_attributes"=>{"first_name"=>"John", "last_name"=>"Doe", "street"=>"street", "street_number"=>"", "zipcode"=>"4049", "city"=>"Gent", "country"=>"", "email"=>"john@hotmail.com", "phone"=>""}, "payment"=>"not paid"}, "reservation_options_attributes"=>[{"option_id"=>"109", "option_quantity"=>"1"}, {"option_id"=>"110", "option_quantity"=>"1"}], "commit"=>"Save & proceed to additional options", "hotel_id"=>"109"}楷模class Reservation < ApplicationRecord  has_many :reservation_options, dependent: :destroy  has_many :options, through: :reservation_options  accepts_nested_attributes_for :reservation_optionsendclass ReservationOption < ApplicationRecord  belongs_to :option  belongs_to :reservation  accepts_nested_attributes_for :optionendclass Option < ApplicationRecord  belongs_to :room_type  has_many :reservation_options, dependent: :destroy  has_many :reservations, through: :reservation_options  validates :name, presence: trueend保留选项的输出 1=> <ActionController::Parameters {"option_id"=>"110", "option_quantity"=>"1"} permitted: false>保留选项的输出 2=> #<ActiveRecord::AssociationRelation [#<ReservationOption id: 62, option_id: 110, reservation_id: 142, option_quantity: nil, created_at: "2019-10-25 12:27:45", updated_at: "2019-10-25 12:27:45">]>
查看完整描述

1 回答

?
慕容3067478

TA贡献1773条经验 获得超3个赞

我认为这可能会满足您的要求:


class ReservationsController < ApplicationController


  def create

    @user = current_user

    @hotel = Hotel.find(params[:hotel_id])

    @reservation = @hotel.reservations.new(reservation_params)

    if @reservation.save

      params[:reservation_options_attributes].each do |reservation_option|

        if @option = Option.find_by(id: reservation_option[:option_id])

          @reservation.options << @option

          reservation_option = @reservation.reservation_options.where(option: @option)

          reservation_option.update(option_quantity: reservation_option[:option_quantity])

        end

      end

      authorize @reservation

      redirect_to hotel_path(@hotel)

    else

      @room_type_list = @hotel.room_types

      render 'new'

    end

  end


end

自然而然地,这假定Reservation belongs_to :hotel您当前未在Reservation模型中显示的。还有,那个Hotel has_many :reservations。


这也假设您的ReservationOption模型具有option_quantity属性。这似乎是拥有这种东西的自然场所。


查看完整回答
反对 回复 2021-12-02
  • 1 回答
  • 0 关注
  • 169 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信