Ruby on rails Ruby不能';找不到带有'的ServiceOrder;id'=

Ruby on rails Ruby不能';找不到带有'的ServiceOrder;id'=,ruby-on-rails,ruby,notifications,Ruby On Rails,Ruby,Notifications,我正在设置一个应用内通知,以显示用户收到的所有通知,但我收到了一个“找不到ID”错误。我在这里遵循这个指南。 我想在每次服务订单收到与其关联的新请求时发出通知。 你知道这是什么原因吗 我尝试进入我的路线并添加如下内容: resources :service_orders do resources :requests end 但它不起作用,它只是使请求路径不起作用 我新添加的代码是: (@service_order.users.uniq - [current_user]).each d

我正在设置一个应用内通知,以显示用户收到的所有通知,但我收到了一个“找不到ID”错误。我在这里遵循这个指南。 我想在每次服务订单收到与其关联的新请求时发出通知。 你知道这是什么原因吗

我尝试进入我的路线并添加如下内容:

 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\u 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
申请表格视图:

<%= 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 %>

禁止发送此请求:
主题: 信息: 发行费用范围: 最快可用日期: 当前用户id%> @服务\u订单id%>
要路由到,您应该传递一个数组

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

这相当于调用
service\u order\u requests\u path(service\u order\u id:@service\u order.to\u param)
。您还可以使用
shallow:true
选项来避免嵌套成员路由。

也许您应该使用
@service\u order=ServiceOrder.find(参数[:request][:service\u order\u id])
?您是如何创建请求的?为它添加表单,请不要给出此错误
NoMethodError(未定义的方法
users'for nil:NilClass)`。我将添加我的_表单页面
form_for( [@service_order, @request])
redirect_to([@service_order, @request])
 # ... etc