Ruby on rails Rails 4-构建多个关系

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的创建操作中所做的: .

当用户创建新的预订记录时,输入的部分数据是电子邮件地址。此电子邮件地址用于同时创建新的来宾记录(如果尚未存在)。预订时应将客人id作为记录的一部分

在我的模型中,我定义了以下关系:

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这一行,因为这似乎不利于双方的关系,因为住宿有多个用户,所以我把这一行放在那里,因为这是你写的。:)