Ruby on rails Rails 4-构建多个关系
当用户创建新的预订记录时,输入的部分数据是电子邮件地址。此电子邮件地址用于同时创建新的来宾记录(如果尚未存在)。预订时应将客人id作为记录的一部分 在我的模型中,我定义了以下关系:Ruby on rails Rails 4-构建多个关系,ruby-on-rails,Ruby On Rails,当用户创建新的预订记录时,输入的部分数据是电子邮件地址。此电子邮件地址用于同时创建新的来宾记录(如果尚未存在)。预订时应将客人id作为记录的一部分 在我的模型中,我定义了以下关系: accommodations has_many bookings guests has_many bookings bookings belongs_to accommodations bookings belongs_to guests 这是迄今为止我在BookingsController的创建操作中所做的: .
accommodations has_many bookings
guests has_many bookings
bookings belongs_to accommodations
bookings belongs_to guests
这是迄今为止我在BookingsController的创建操作中所做的:
...
def create
accommodation = current_user.accommodation
@booking = accommodation.bookings.build(post_params)
@guest = accommodation.guests.build(params[:email])
if @booking.save
flash[:success] = 'The booking has been added successfully.'
redirect_to :controller => 'bookings', :action => 'index'
else
render 'new'
end
end
...
我的问题是:
- 当我希望新预订有客人id时,我是否应该使用“build”两次
- 如何使用电子邮件检查客人是否已经存在
- 构建客人时使用params[:email]是否安全
@guest
,则不需要将其作为实例变量。因此:
accommodation = current_user.accommodation
guest = Guest.find_or_create_by(:email => params[:email])
@booking = accommodation.bookings.new(post_params.merge(:guest_id => guest.id))
您不需要在
#create
方法中使用build
,因为它的主要用途是维护与仍然没有主键的对象的关联关系。但既然你把你的东西放在这里,我们可以使用Ruby提供的良好的旧new
。而新客户可能与当前用户不同的原因是他们可能是为其他人预订的?用户和客户是不同的-用户代表客户创建预订Sah-我没有意识到您可以这样合并-我认为您必须将其留给Rails来添加外键。另外,我还想了解一下current_user.accountability这一行,因为这似乎不利于双方的关系,因为住宿有多个用户,所以我把这一行放在那里,因为这是你写的。:)