我认为我遇到了路由问题:我有一项功能,允许用户对特定个人进行评论。因此,我有一个评论模型和一个个人模型。我正在尝试找到一种方法来删除该个人的特定评论。
Routes.rb:
resources :individuals do
collection do
get 'search'
end
collection do
get 'schools'
end
member do
post 'flag', :individuals
end
resources :reviews do
member do
post 'flag', 'vote', 'downvote', :review
end
resources :reviews, only: [:index, :create]
end
end
resources :reviews, only: [:destroy, :update, :edit]
因此,我相信,如果我做对了,我将为评论索引嵌套并创建:individuals/1/reviews/2
但不会对动作进行销毁,更新和编辑:reviews/1/edit
。
评论控制器:
def destroy
@review.destroy
respond_to do |format|
format.html { redirect_to @professor, notice: 'Review was successfully destroyed.' }
format.json { head :no_content }
end
end
View.html.rb:
<% if @review.blank? %>
Nothing to review!
<% else %>
<div class="list-group">
<ul class="list-unstyled">
<% @review.each do |review| %>
<li class="list-group-item"> <%= review.comment %> Review Flagged:
<%= pluralize(review.flag, 'time') %>. <%= link_to 'View', professor_review_path(review.professor, review) %>
<%= link_to 'Edit', edit_individual_review_path(review.individual, review) %>
<%= link_to 'Delete', destroy_review_path(review), data: {confirm: "Are you sure you want to delete this review?"} %> </li>
<% end %>
</ul>
</div>
<% end %>
查看页面不起作用,我得到一个
NoMethodError: undefined method `destroy_review_path' for #<#<Class:0x007fb095e46e28>:0x007fb09d1afdb0>
Did you mean? edit_review_path
我已将其用于删除个人。
这里没有路由问题:)
这只是RESTful路由一开始很难理解的精妙之处。
如果您运行rake routes
,将看到所有路线的定义。
GET /reviews reviews#index reviews_path
POST /reviews reviews#create
GET /reviews/new reviews#new new_review_path
GET /reviews/:id/edit reviews#edit edit_review_path
GET /reviews/:id reviews#show review_path
PUT /reviews/:id reviews#update
DELETE /reviews/:id reviews#destroy
您会注意到as:
某些路线没有命名。
这是因为路由名称与URL路径匹配,而不与控制器或操作匹配。
请注意,使用相同URL路径的路由也使用相同的路由名称。
和单个的RESTful途径可以使用4种不同类型的动词(即GET
,POST
,PUT/PATCH
,DELETE
)单个路由。
正确的链接代码如下:
<%= link_to 'Delete', review_path(review), method: :delete, data: {confirm: "Are you sure you want to delete this review?"} %> </li>
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句