Ruby on rails Ruby不能';找不到带有'的ServiceOrder;id'=
我正在设置一个应用内通知,以显示用户收到的所有通知,但我收到了一个“找不到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
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