Controller#show

时间:2019-02-11 18:07:07

标签: ruby-on-rails routes

我有一个Railsapp,这是一家预制花园房屋的在线商店。我尝试创建的过程是index>show>send inquiry>accept/decline quotation>purchase house。因此,当用户在显示页面上时,他会看到一个用于发送查询的按钮(UserMailer被触发,并向用户发送一封电子邮件作为确认,并向管理员发送一封电子邮件进行报价)。管理员(阅读:企业主)在他的电子邮件中将具有一个链接,该链接会将他发送到查询显示页面(该页面显示了带有价格,交付成本和总计的房屋图片)。管理员单击“编辑”以编辑运费。单击后,将更新查询记录,用户将收到一封电子邮件,其中包含报价查询页面的链接,报价已经准备就绪。对于他,他将看到一个接受和拒绝按钮。我被困在这一点上。

我写了新的路线和控制器动作来照顾接受或拒绝。这将分别为查询记录提供状态quotation acceptedquotation declined

我有一个Railsapp,这是一家预制花园房屋的在线商店。我尝试创建的过程是index>show>send inquiry>accept/decline quotation>purchase house。因此,当用户在显示页面上时,他会看到一个用于发送查询的按钮(UserMailer被触发,并向用户发送一封电子邮件作为确认,并向管理员发送一封电子邮件进行报价)。管理员(阅读:企业主)在他的电子邮件中将具有一个链接,该链接会将他发送到查询显示页面(该页面显示了带有价格,交付成本和总计的房屋图片)。管理员单击“编辑”以编辑运费。单击后,将更新查询记录,用户将收到一封电子邮件,其中包含报价查询页面的链接,报价已经准备就绪。对于他,他将看到一个接受和拒绝按钮。我被困在这一点上。

我写了新的路线和控制器动作来照顾接受或拒绝。这将分别为查询记录提供状态quotation acceptedquotation 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

0 个答案:

没有答案