現在、Rails でカスタム メソッドを使用しようとしていますが、その方法がわかりません。コントローラーのデフォルトのメソッドとは別に、次のメソッドを追加したいと思いました。
def cancel
@newsletter = Newsletter.find(params[:id])
respond_to do |format|
#SendGrid Newsletter API - Delete Newsletter Schedule
SendGrid.delete_schedule(@newsletter.name)
@newsletter.status = "CANCELLED"
@newsletter.save
format.html { redirect_to newsletters_url }
format.json { head :no_content }
end
終わり
このメソッドはデフォルトの :destroy メソッドと同じですが、実際にはオブジェクトを破棄しません。
私の見解では、次のことがありました。
<% @newsletters.each do |newsletter| %>
<tr>
<td><%= newsletter.identity %></td>
<td><%= newsletter.name %></td>
<td><%= newsletter.recipients %></td>
<td><%= newsletter.subject %></td>
<td><%= newsletter.html %></td>
<td><%= newsletter.text %></td>
<td><%= newsletter.schedule %></td>
<td><%= newsletter.status %></td>
<td><%= link_to 'Show', newsletter %></td>
<td><%= link_to 'Edit', edit_newsletter_path(newsletter) %></td>
<td><%= link_to 'Destroy', newsletter, method: :delete, data: { confirm: 'Are you sure?' } %></td>
<td><% if newsletter.status == "SCHEDULED" %><%= link_to 'Cancel', newsletter, method: :cancel, data: { confirm: 'Cancel Schedule?' }%><% end %></td>
</tr>
<% end %>
エラーが発生しました: [POST] に一致するルートがありません " _ニュースレターの URL __ "
ルートをレーキすると、上記のエラーのルートがありません。ルートを追加する方法とルートが必要な理由を教えてください。
更新 現在、ルートが一致しないというエラーがまだあります。以下は、「キャンセル」メソッドに関連するすべてのファイルです。
ルート.rb
resources :newsletters do
match '/cancel/:id' => 'newsletters#cancel', :as => :cancel
end
ニュースレター_controller.rb
def cancel @newsletter = Newsletter.find(params[:id])
respond_to do |format|
#SendGrid Newsletter API - Delete Newsletter Schedule
SendGrid.delete_schedule(@newsletter.name)
@newsletter.status = "CANCELLED"
@newsletter.save
format.html { redirect_to newsletters_path(@newsletter) }
format.json { head :no_content }
end
end
ニュースレター/index.html.erb
<%= link_to 'Cancel', newsletter_cancel_path(newsletter) %>