resources :categories do
member do
post :destroy
end
collection do
get :delete
end
end
我试了很多次,post 这个 action 必须放在 member do 里面 collection do 只能放 get。 rails 是这样的约定吗?
哇,为啥要举个反 RESTful 的例子,已经搞不明白你的意图了
destroy 已经包含在 resources 默认的 7 动作里面了。collention 和 member 都对 http 动作没有限定。
category POST /categories/:id(.:format) {:action=>"destroy", :controller=>"categories"}
delete_categories GET /categories/delete(.:format) {:action=>"delete", :controller=>"categories"}
categories GET /categories(.:format) {:action=>"index", :controller=>"categories"}
POST /categories(.:format) {:action=>"create", :controller=>"categories"}
new_category GET /categories/new(.:format) {:action=>"new", :controller=>"categories"}
edit_category GET /categories/:id/edit(.:format) {:action=>"edit", :controller=>"categories"}
PUT /categories/:id(.:format) {:action=>"update", :controller=>"categories"}
DELETE /categories/:id(.:format) {:action=>"destroy", :controller=>"categories"}
这就是我现在的了。其实问题我解决了。
就是没解决之前,我遇到了我在http://localhost:3000/categories/delete?id=1routes给出的错误。这个里面我点删除会出现 大概是说我没有命名 routes。
控制器:
# 删除 ============================================================================
def delete
@category = Category.find(params[:id])
@title = "删除分类"
end
# 删除 ============================================================================
def destroy
@category = Category.find(params[:id])
if @category.destroy
redirect_to @category
end
end
<%= form_for(:category, :url => { :action => "destroy", :id => @category.id }) do |f| %>
<div class="alert-message block-message error">
<h2>
你确定要删除 <%= @category.name %> 吗?
</h2><br />
<ul>
<li><%= @category.name %></li>
<li><%= @category.meta_desc %></li>
</ul>
<br />
<%= submit_tag "删除!", :class => 'btn danger' %> <%= link_to '返回', { :action => 'index' }, :class => 'btn' %>
</div>
<% end %>
于是我加上了 post :destroy,但是我点删除就给我出现了添加分类成功。
resources :categories do
collection do
get :delete
post :destroy
end
end
最后我改成了这样,终于正常了。
resources :categories do
member do
post :destroy
end
collection do
get :delete
end
end
delete 这个 URL 的写法就是有问题的,你不应该写再 collection 里面,而应该写在 member 里面
这样 URL 才会是 /categories/:id/delete
而不是 /categories/delete?id=:id
此外,你的编辑器 tab 缩进有很大问题!!!
NO。member 也可以用在 resources 下。你用 scaffold 生成一個 RESOURCES 然後看 ROUTE 就知道。它們的區別在於 你想一次處理多少 RESOURCE。如果是 SHOW EDIT 這種只處理一個。那麼就是 MEMBER。如果 index bulk_edit 這樣一次操作多個的 那麼就是 COLLECTION。這個字面上理解就比較容易了。member & collection.
分辨 collection & member 的方法很簡單 如果,你是要針對一個集合 (也就是一大堆資料,ex: articles, posts, girls) 去做動作的話 (ex: login),那就是寫在 collection 中 如果是要針對一個集合中的某個個體,像是一篇文章、一個使用者,那就是用 member
GET /articles/by_me #=> collection PUT /rooms/1/join #=> member
所以,若你要刪除的話,應該是 GET /categories/1/delete 這樣才對,所以應該是 member