我有一个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
。网址位于http://localhost:3000/houses/15/inquiries/15
上,该网址不是house_path,而是house_inquiry_path,并且同时将查询作为房子ID。我希望用户重定向到的house_path是:http://localhost:3000/houses/2
。