2016-06-23 67 views
0

我有以下型號:選擇的form_for幫手家長協會

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 %> 

問題是,當我試圖保存室的驗證調用,並說,

「房間可以't be blank「

我該怎麼做?在ReservationController我的允許的PARAMS是:

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

感謝

+1

將'room_id'添加到強參數時會發生什麼?你也可以發佈你的預訂/房間控制器創建操作? –

+0

@HarrisonLucas 驗證通過,如果我改變:房間:room_id允許PARAMS。 如何驗證房間是否存在?驗證:'validates:room,presence:true'不會這樣做? 有更好的方法來創建選擇?像[simple_form]使用'f.association'由[plataformatec](https://github.com/plataformatec/simple_form) – gumaro

+0

看到我的答案更詳細的解釋 –

回答

0

的PARAMS應該是這樣的:

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

,如果你想驗證一個房間是否是有效還是無效,你可以這樣做此:

if Room.where(id: @reservation.room_id).present? 
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 

在您的預訂。

希望這會有所幫助!