ユーザーがイベントに参加するために登録できる簡単なRailsアプリケーションを作成しました。快適なユーザーエクスペリエンスを作成するために、身元不明のユーザーはイベントを閲覧し、イベントを希望するイベントが表示された場合は、[イベントに登録]をクリックできます。次に、Twitter Bootstrapを使用して、アプリケーションはユーザーにモーダル(ポップアップ)を表示し、イベントに参加するために最初に登録するように求めます。
モーダルの形式は次のとおりです。
simple_form_for @user do |f|
f.input :name, :placeholder => "Name", :label => false
f.input :email, :placeholder => "Email", :label => false
f.input :postcode, :placeholder => "Postcode", :label => false
hidden_field_tag :event_id, @event.id
f.button :submit, "Sign me up for this event"
end
つまり、基本的に、event_id値をユーザーコントローラーの作成アクションに渡すことがわかります。これを処理するには、作成アクションは次のようになります。
def create
if params[:event_id].blank?
event_registration = false
else
event_id = params[:event_id].to_s
event_registration = true
end
if event_registration == true
# The user is being created as part of signing up to an event
@user_check = User.find_by_email(params[:user][:email])
unless @user_check.nil?
# The user already exists, but the visitor forgot
@user = @user_check
else
# The user is a new sign up
@user = User.new(params[:user])
end
# Now create the attendance for the user
@event = Event.find(event_id)
@attendance = @event.attendances.new
@attendance.attendee = @user
@attendance.save
redirect_target = event_attendance_thank_path(@event, @attendance)
else
# The user is being created cleanly
@user = User.new(params[:user])
end
if @user.save
redirect_to root_path, notice: "Thanks for signing up, check your email"
else
# We should destroy the failing attendance?
redirect_to root_path, alert: "Something's up with the signup. Have you already registered with this email address?"
end
end
私にとって、コントローラーでこのレベルの複雑さを処理するのは面倒だと感じます。これについてもっと良い方法はないかと思います。
これをリファクタリングするためのヘルプやポインタをいただければ幸いです。