Я настраиваю уведомление в приложении, чтобы показать все уведомления, которые есть у пользователя, однако я получаю сообщение об ошибке «Не удается найти идентификатор».Я следую этому руководству здесь 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 %>