1

ありがとうページを作成しようとしています。URLをテストして正常に機能するため、このルートは正常に機能しますが、作成アクションでリダイレクトしようとすると、次のようになります。

{:action => "show"、:controller => "schedules"、:locale =>:en、:id=>nil}に一致するルートはありません

コントローラ

  def create
    @appointment = Appointment.new(params[:appointment])

      if @appointment.save
        #send email
        AppointmentMailer.appointment_confirmation(@appointment).deliver
        AppointmentMailer.new_appointment(@appointment).deliver
        redirect_to :action => "thank_you"
      else
        render :action => 'new', :alert => @appointment.errors.full_messages.split(', ')
      end
  end


  def new
    @schedule = Schedule.find(params[:id])
    @appointment = @schedule.appointments.new
  end


  def thank_you
      @appointment = Appointment.find(params[:id])
  end

ルート

  scope ":locale", :locale => /#{I18n.available_locales.join("|")}/ do
    root :to => "Doctors#index"


    resources :specialties
    resources :branches

    resources :doctors do
       get 'new_schedule', :on => :member, :controller => 'schedules', :action => 'new'
    end

    # NIA: Here is the trick: we remove /shedules/new route (with :except => :new)
    # and map /doctors/new_schedule instead to SchedulesController#new action (see above)
    # (the same is done with appointments)
    resources :schedules, :except => :new do
      get 'new_appointment', :on => :member, :controller => 'appointments', :action => 'new'
    end

    resources :appointments do
      member do
        get :thank_you
      end
    end

  end

  match '*path', :to => redirect("/#{I18n.default_locale}/%{path}")
  match '', :to => redirect("/#{I18n.default_locale}")
4

1 に答える 1

1

あなたのルートは間違っています。あなたはこれが欲しい(s / member / collection):

resources :appointments do
  collection do
    get :thank_you
  end
end

'member'を使用すると、サンキュールートは渡していないIDを受け取ることを期待します。したがって、失敗します。起こらないコレクションで。

この変更を行う前に「rakeroutes」を実行して、私が話していることを確認してください...その後実行してください。

于 2013-01-24T21:33:52.030 に答える