У меня есть 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
.