请耐心等待。我在这里遇到了类似的问题,但我的要求却与众不同。
我有一个名为 RideLaterRequest 的模型。在应用程序中,我允许用户在此模型上创建记录。目前,一旦保存了记录,就会向Android应用程序发送通知。逻辑如下:
ride_later_request.rb
class RideLaterRequest < ActiveRecord::Base
after_save :send_notif #run send_notif method once the record is saved.
def send_notif
RideLaterRequestHandler.ride_later_request_created(self)
end
end
上面的方法实际上调用了另一个类方法(早期的开发人员在一个单独的类中定义了一个方法)
class RideLaterRequestHandler
def self.ride_later_request_created(ride_later_request)
#####................####
end
end
因此,一旦此方法执行,通知将被发送到Android应用程序。
现在我试图阻止这个自动化系统。并通过在视图文件中添加一个按钮来手动处理此流程。
首先,我通过在 ride_later_request.rb 文件中评论after_save :send_notif
来停止自动通知。因此,一旦在该模型上保存新记录,就不会发送通知。
在视图文件中,我显示 RideLaterRequest 模型的记录,如下所示:
admin_reports_controller.rb
class AdminReportsController < ApplicationController
def trip_report
@ride_later_request = RideLaterRequest.all
end
end
trip_report.html.erb
<table>
<tr>
<th>Date</th>
<th>Trip ID</th>
<th>Send Notification</th>
</tr>
<% @ride_later_requests.each do |trip_report| %>
<tr>
<td><%= trip_report.planned_start_time.to_date%></td>
<td><%= trip_report.id%></td>
<td>
<%= button_to "Send Notification", #In normal case I would have added a path to the controller method to Send notification here %>
</td>
</tr>
</table>
正如您所看到的,我正在尝试添加按钮操作,以便发送通知。我在这里尝试做的唯一事情是,一旦创建了新的ride_later_request
行,就会发送通知。现在我停止并尝试通过添加按钮在已保存的记录上手动执行此操作。我的问题是如何在我试图给出的这个按钮的开头调用我上面解释的def send_notif
模型方法?
我知道这是应用程序特定的问题,但我已经尽力通过解释它来使其具体化,我想。非常感谢帮助。
答案 0 :(得分:1)
如何在send_notification
上创建RideLaterRequestController
操作,然后(在routes.rb
中)设置send_nofication_ride_later_request
路径。也许是这样的事情:
resources :ride_later_requests do
member do
post :send_nofication
end
end
哪个收益率:
send_nofication_ride_later_request POST /ride_later_requests/:id/send_nofication(.:format) ride_later_requests#send_nofication
POST /ride_later_requests(.:format) ride_later_requests#create
ride_later_requests GET /ride_later_requests(.:format) ride_later_requests#index
new_ride_later_request GET /ride_later_requests/new(.:format) ride_later_requests#new
edit_ride_later_request GET /ride_later_requests/:id/edit(.:format) ride_later_requests#edit
ride_later_request GET /ride_later_requests/:id(.:format) ride_later_requests#show
PATCH /ride_later_requests/:id(.:format) ride_later_requests#update
PUT /ride_later_requests/:id(.:format) ride_later_requests#update
DELETE /ride_later_requests/:id(.:format) ride_later_requests#destroy
然后执行以下操作:
<%= link_to 'Send Notification', send_nofication_ride_later_request_path(trip_report), method: :post %>
您可以将该链接打扮成按钮。
然后,在RideLaterRequestController
中,例如:
class RideLaterRequestController < ApplicationController
...
def send_notification
@ride_later_request = RideLaterRequest.find_by(id: params[:id])
RideLaterRequestHandler.ride_later_request_created(@ride_later_request)
# redirect, render, or whatever depending on whether you want this
# to be AJAXy or regular HTML.
end
...
end