所以,我有两个型号Room
和Reservation
。为属于不同模型的模型创建独立表单?
Room
对象是由拥有房间并存储在数据库中的人预先创建的。
我想允许不同的用户稍后创建预订(在不同的页面和完全独立的形式)belongs_to的特定房间,所以当我想拉起预订该列表这样房间,我可以简单地做一些事情,如@room.reservations
。
我想要在RoomsController
中创建房间,并在ReservationsController
中创建预定房间。
不幸的是,我似乎无法弄清楚如何做到这一点的“Rails方式”。我想出的最好的是:
# .../rooms/new
= form_for @room, room_path do |f|
# Form that creates a room
# .../reservations/new
= form_for @reservation, reservation_path do |f|
# Form that creates a reservation
但是,当我这样做,这样一来,我没有提到的一个ReservationsController
特定上市方式(至少我知道)。
class ReservationsController < ApplicationController
# What I want to do:
@listing = Listing.new(params[:id]) # no way of getting Listing's id
@reservation = @listing.reservations.build(reservation_params)
# etc...
我想我可以把它作为在reservations
形式的隐藏字段,但我没有办法验证它。我测试了通过填写表格,然后改变所述隐藏的输入字段的PARAMS [:ID]在Chrome的值检查元素,这当然将其发布到不同的室,这是不期望的。
我现在坚持这样做:
# I ended up having to create a "reserve" action in the listings controller
= form_for @listing, :url => { :controller => "listings", :action => "reserve" } do |f|
f.fields_for :reservation do |r|
# All the fields to create a reservation here...
这是不是在所有我想要的东西。我希望能够利用我的ReservationsController
。
我该如何认识到这一点?
请注意,我用'Room',既然你是不是真正清楚'Listing'意味着你的应用程序。尽管如此,同样的原则也适用。 – max
对不起,我的意思是“房间”,而不是“上市”!我要给这个提示一下,看看它是如何实现的,但只要看看它,我已经可以告诉我这对我来说可能是正确的答案。 –
这是我用来为答案生成代码的演示Rails应用程序:https:// github。COM/maxcal /沙箱/树/ 31526836 – max