选择form_for帮助父母关联

时间:2016-06-23 01:34:58

标签: ruby-on-rails ruby ruby-on-rails-4

我有以下型号:

class Reservation < ActiveRecord::Base

  belongs_to :room


  #some validations

  validates :room, presence: true
end

class Room < ActiveRecord::Base
  has_many :reservation

  # some validations
end

我要做的是显示room_id的选项并验证关联,而不是外键。

所以,我有这个表单帮助选择Reservation

<%= f.select :room_id, Room.all.map { |room| [ room.code, room.id ] }, required: true %>

问题是当我尝试保存时,会调用Room的验证并说

  

“房间不能空白”

我该怎么做?我在AllowController上允许的参数是:

params.required(:reservation).permit(:room, ...) #... = other params

由于

2 个答案:

答案 0 :(得分:0)

Params应该像:

params.required(:reservation).permit(:room_id, ...)

如果您想验证房间是否有效,可以这样做:

if Room.where(id: @reservation.room_id).present?

答案 1 :(得分:0)

为了将预订保存到会议室,您需要将room_id添加到允许的参数中,而不仅仅是room

E.g。

params.required(:reservation).permit(:room, ...) #... = other params

现在,如果您想确认预订肯定有房间,您可以在控制器中执行此类操作

def create
  room = Room.find(params[:room_id] # or whatever that param is
  reservation = room.reservations.build(room_params)

  #... rest of method here
end

这将确保预订始终拥有有效房间。然后你也可以(作为额外的安全措施)

validates_presence_of :room_id

预订。

希望这有帮助!