わかりました、この問題を解決する方法について少し混乱しました。
私は 1 つのフォームと 2 つのモデルを持っています。ここに私のフォームがあります:
<% if @booking.errors.any? %>
<% @booking.errors.full_messages.each do |msg| %>
<p class="error"><%= msg %></p>
<% end %>
<% end %>
<% if @guest.errors.any? %>
<% @guest.errors.full_messages.each do |msg| %>
<p class="error"><%= msg %></p>
<% end %>
<% end %>
<%= form_for :booking, url: bookings_path do |f| %>
<%= label_tag :email, "Guest's Email Address" %>
<%= text_field_tag :email %>
<%= f.label :nights, "Nights" %>
<%= f.text_field :nights %>
<%= f.label :nights, "People" %>
<%= f.text_field :people %>
<%= f.label :nights, "Arrival Date" %>
<%= f.text_field :arrival %>
<% end %>
ご覧のとおり、メール フィールドはフォーム ビルダーの一部ではありません。電子メール アドレスがまだ存在しない場合、新しいゲスト レコードを作成するために電子メール アドレスが使用されます。ゲストのIDを取得したら、予約記録も作成できます。
これが私のBookingControllerの作成アクションのコードです-フォームが送信される場所...
...
def create
accommodation = current_user.accommodation
guest = Guest.find_or_create_by(:email => params[:email])
@booking = accommodation.bookings.new(post_params.merge(:guest_id => guest.id))
if @booking.save
flash[:success] = 'The booking has been added successfully.'
redirect_to :controller => 'bookings', :action => 'index'
else
render 'new'
end
end
...
この質問は新しいものではないことは承知していますが、私の問題に対する適切な解決策がどこにも見つかりません。(必要に応じて) フォームを適切に設定し、2 つのモデルを使用してすべてのフィールドを検証できるようにしたいと考えています。次に、エラー メッセージを表示する必要があります。現在、私の電子メールは検証中に無視され、次に何をすればよいかわかりません。
どんな助けでも大歓迎です。