ActiveRecord :: RecordNotFound в Controller # show - PullRequest
0 голосов
/ 11 февраля 2019

У меня есть Railsapp, интернет-магазин сборных садовых домов.Процесс, который я пытаюсь создать, - index>show>send inquiry>accept/decline quotation>purchase house.Поэтому, когда пользователь находится на странице показа, он видит кнопку для отправки запроса (UserMailer срабатывает и отправляет электронное письмо пользователю в качестве подтверждения и электронное письмо администратору для составления предложения).Администратор (читай: владелец бизнеса) будет иметь ссылку в своем электронном письме, которая отправит его на страницу показа запроса (на которой будет показана фотография дома с указанием цены, стоимости доставки и общей суммы).Администратор нажимает кнопку «Изменить», чтобы изменить стоимость доставки.Когда он нажимает кнопку «Отправить», запись запроса обновляется, и пользователь получает электронное письмо о том, что предложение готово со ссылкой на страницу показа запроса.Для него он увидит кнопку принять и отклонить.Я застрял в этой точке.

Я написал новые маршруты и действия контроллера, чтобы позаботиться о принятии или отклонении.Это либо даст запись запроса, соответственно, состояние quotation accepted или quotation declined.

У меня есть Railsapp, который является интернет-магазином для сборных садовых домиков.Процесс, который я пытаюсь создать, - index>show>send inquiry>accept/decline quotation>purchase house.Поэтому, когда пользователь находится на странице показа, он видит кнопку для отправки запроса (UserMailer срабатывает и отправляет электронное письмо пользователю в качестве подтверждения и электронное письмо администратору для составления предложения).Администратор (читай: владелец бизнеса) будет иметь ссылку в своем электронном письме, которая отправит его на страницу показа запроса (на которой будет показана фотография дома с указанием цены, стоимости доставки и общей суммы).Администратор нажимает кнопку «Изменить», чтобы изменить стоимость доставки.Когда он нажимает кнопку «Отправить», запись запроса обновляется, и пользователь получает электронное письмо о том, что предложение готово со ссылкой на страницу показа запроса.Для него он увидит кнопку принять и отклонить.Я застрял в этой точке.

Я написал новые маршруты и действия контроллера, чтобы позаботиться о принятии или отклонении.Это либо даст запись запроса соответственно состоянию quotation accepted или quotation declined.

Rails.application.routes.draw do

  mount Attachinary::Engine => "/attachinary"
  devise_for :users
  root 'houses#index'
  resources :houses do
    resources :inquiries
    put 'inquiries/:id', to: 'inquiries#accept', as: :accept
    put 'inquiries/:id', to: 'inquiries#decline', as: :decline
  end
  resources :orders, only: [:show, :create] do
    resources :payments, only: [:new, :create]
  end
end

и контроллеру:

class InquiriesController < ApplicationController
  skip_before_action :authenticate_user!
  before_action :set_house
  before_action :set_inquiry, only: [:show, :edit, :update, :accept]

  def show
  end

  def new
    @inquiry = Inquiry.new
    authorize @inquiry
  end

  def create
    @inquiry = Inquiry.new(inquiry_params)
    authorize @inquiry
    @inquiry.state = 'pending'
    @inquiry.house = @house
    @admin = User.find_by(admin: true)
    if @inquiry.save
      UserMailer.inquiry(@inquiry, @house).deliver_now
      AdminMailer.lead(@inquiry, @admin, @house).deliver_now
      redirect_to root_path
    else
      render :new
    end
  end

  def edit
  end

  def update
    if @inquiry.update(inquiry_params)
      @inquiry.update(state: 'quotation created')
      UserMailer.quotation(@inquiry, @house).deliver_now
      redirect_to house_inquiry_path
    else
      render :edit
    end
  end

  def accept
    @inquiry.state = "quotation accepted"
    redirect_to house_path(@house)
  end

  def decline
    @inquiry.state = "quotation declined"
    redirect_to house_path(@house)
  end

  private

  def set_house
    @house = House.find(params[:house_id])
  end

  def set_inquiry
    @inquiry = Inquiry.find(params[:id])
    authorize @inquiry
  end

  def inquiry_params
    params.require(:inquiry).permit(:name, :phone, :email, :region, :comment)
  end
end

Когда я сейчас нажимаю на кнопку подтверждения, я получаюActiveRecord::RecordNotFound in InquiriesController#show ошибка с объяснением Couldn't find House with 'id'=15.URL находится на http://localhost:3000/houses/15/inquiries/15, который является не house_path, а house_inquiry_path, и в то же время он принял запрос в качестве идентификатора дома.Путь house_path, на который я хочу перенаправить пользователя, таков: http://localhost:3000/houses/2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...