Ruby Не удалось найти ServiceOrder с 'id' = - PullRequest
0 голосов
/ 25 декабря 2018

Я настраиваю уведомление в приложении, чтобы показать все уведомления, которые есть у пользователя, однако я получаю сообщение об ошибке «Не удается найти идентификатор».Я следую этому руководству здесь https://www.youtube.com/watch?v=KOs8f8TnwZs. Я хочу отправлять уведомления каждый раз, когда заказ на обслуживание получает новый запрос, связанный с ним.Вы знаете, что может быть причиной этого?

Я пытался перейти к своим маршрутам и добавить что-то вроде этого:

 resources :service_orders do
   resources :requests
 end

Но это не сработало, и он просто не сделал маршрут запросовРабота.

Код, который я недавно добавил:

(@service_order.users.uniq - [current_user]).each do |user|
      Notification.create(recipient: user, actor: current_user, action: "posted", notifiable: @request)
 end

И вот что вызывает ошибку, @service_order не найден по какой-то странной причине.

Мой контроллер запросов:

class RequestsController < ApplicationController
  before_action :set_request, only: [:show, :edit, :update, :destroy]
  before_action :old_request, only: [:show, :index, :update]
  before_action :set_so


  def index
    if logged_in?(:site_admin)
      @request = Request.all
    elsif logged_in?(:itp_user)
      @request = Request.pending.requests_by current_user
    else
      @request = Request.pending.so_user_request current_user.service_orders
    end
  end


  def new
    @request = Request.new
  end


  def create

    @request = current_user.requests.new(request_params)
    authorize @request

    respond_to do |format|
      if @request.save

        (@service_order.users.uniq - [current_user]).each do |user|
      Notification.create(recipient: user, actor: current_user, action: "posted", notifiable: @request)
    end

    format.html { redirect_to @service_order, notice: 'Your request has been sent' }
  else
    format.html { redirect_to @request, :flash => { :error => @request.errors.full_messages.join(', ') } }
      end
    end
  end


  def show
    authorize @request
  end

  def edit
    authorize @request
  end


  def update
    authorize @request

    if @request.update(request_params)
      redirect_to requests_path, notice: 'Your request was created successfully'
    else
      render :edit
    end
  end


  def destroy
    authorize @request

    @request.destroy
    redirect_to requests_path, notice: 'Your request was deleted successfully'
  end


  private

  def request_params
    params.require(:request).permit(:available_date, 
                                :message, 
                                :charge_range, 
                                :status, 
                                :heading,
                                :service_order_id,
                                :user_id
                                )
  end

  def set_request 
    @request = Request.find(params[:id])
  end

  def old_request
    Request.where('created_at <= :fifteen_days', fifteen_days: Time.now - 15.days).where(status: "pending").destroy_all
  end

  def set_so 
    @service_order = ServiceOrder.find(params[:service_order_id])
  end

end

Мои маршруты.rb:

Rails.application.routes.draw do
  resources :request_logs

  namespace :admin do
    resources :users
    resources :issue_types
    resources :requests
    resources :service_orders

    root to: "users#index"
  end

  resources :conversations do
    resources :messages
  end

  resources :requests
  devise_for :users, path: '', path_names: { sign_in: 'login', sign_out: 'logout', sign_up: 'register' }

  resources :service_orders, except: [:show] do
    member do
      get :toggle_status
    end
  end

  get 'user-landing', to: 'user_landing#index'

  get 'service_order/:id', to: 'service_orders#show', as: 'service_order_show'

  get 'contact', to: 'pages#contact'

  root to: 'pages#home'

end

Просмотр формы запроса:

<%= form_for :request, url: requests_path do |f| %>

 <% if @request.errors.any? %>
   <div id="error_explanation">
     <h2><%= pluralize(@request.errors.count, "error") %> prohibited this request from being sent:</h2>

     <ul>
     <% @request.errors.full_messages.each do |message| %>
       <li><%= message %></li>
     <% end %>
    </ul>
   </div>
 <% end %>

   <div class="form-group">
    <h4>Subject:</h4>
    <em><%= f.text_area :heading, class: "form-control" %></em>
   </div>

   <div class="form-group">
     <h4>Message:</h4>
     <em><%= f.text_area :message, class: "form-control" %></em>
   </div>

   <div class="form-group">
     <h4>Issue Charge Range:</h4>
     <em><%= f.number_field :charge_range, class: "form-control" %></em>
   </div>

   <div class="form-group">
     <h4>Soonest Available Date:</h4>
     <em><%= f.date_field :available_date, class: "form-control" %></em>
   </div>

   <%= f.hidden_field :user_id, :value => current_user.id %>
   <%= f.hidden_field :service_order_id, :value => @service_orders.id %>

   <div>
     <%= f.submit 'Send Service Request', class: 'btn btn-primary btn-block' %>
   </div>
 <% end %>

1 Ответ

0 голосов
/ 26 декабря 2018

Для маршрутизации на вложенные ресурсы вы должны передать массив.

form_for( [@service_order, @request])
redirect_to([@service_order, @request])
 # ... etc

Это эквивалентно вызову service_order_requests_path(service_order_id: @service_order.to_param).Вы также можете использовать опцию shallow: true, чтобы избежать вложения маршрутов участников.

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