我有以下型号:
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
由于
答案 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
预订。
希望这有帮助!