2016-06-23 8 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 %> 

問題は、私が保存しようとすると、ルームの検証が呼び出されていると

「ルームはできると述べています空白にしてください

どうすればいいですか? ReservationControllerに私の許可のparamsは、以下のとおりです。

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

、あなたは部屋が有効であるかどうかを検証したい場合は、あなたが行うことができます:PARAMSはようにする必要があり

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

おかげ

+1

strong_paramsに 'room_id'を追加するとどうなりますか?また、あなたの予約/ルームコントローラ作成アクションを投稿してもらえますか? –

+0

@HarrisonLucas 私が変更した場合の検証パス:room to:room_id allowed params。 ルームが存在する場合、どのように検証できますか?検証: 'validates:room、presence:true'はこれをしませんか? 選択肢を作成するより良い方法はありますか? "simple_form"のようなものが[plataformatec]の 'f.association'(https://github.com/plataformatec/simple_form) – gumaro

+0

より詳しい説明は私の答えを参照してください –

答えて

0

この:

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

予約を客室に保存するには、を追加する必要があります許可されたパラメータにはroomだけでなくも含まれます。

など。

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 

ご予約時に。

希望すると便利です。

関連する問題