2012-04-24 70 views
2

我在我的會員控制器中創建了一個自定義操作req,併爲其定義了路由。但是,當我在link_to上給出該自定義操作的路徑時,它給了我錯誤,指出未知操作,操作'show'可能沒有找到MembershipsController.I dny明白爲什麼它找到顯示操作時,我給我的自定義操作的路徑。未知的操作錯誤

以下是隸屬控制器

def req 
    @user =User.find_by_email(params[:email]) 
    @group =params[:group_id] 
    unless @group.nil? 
    if Membership.request(@user.id, @group) 
     redirect_to :back, :notice => 'Joined successfully.' 
    else 
     redirect_to :back, :notice => 'couldnot Joine.' 
    end 
    end 
end 

有我的會員資格控制器內部沒有show動作在我的自定義操作。

以下是我的自定義操作路線:繼

resources :memberships do 
    collection do 
    post 'req' 
    end 
end 

是我groups/show.html.haml這裏我給自定義動作的路徑裏面的代碼..

- if @collegemates.empty? 
    %p.info You have no common collegemates ... 
    - else 
    %table.datatable 
     %thead 
     %tr 
      ... 
     %tbody 
     - @collegemates.each do |c| 
      - unless Membership.group_member(c.id, @group) 
      %tr 
       %td= c.full_name 
       %td= c.email 
       %td= link_to "request to join",{:controller => :memberships, :action => "req",:email =>c.email,:group_id => @group.id},:method => "post" 

當我點擊請求加入我得到這個未知的動作錯誤的顯示操作。我在這裏做錯了什麼?

+1

您是否包含Rails的javascripts? Rails使用javascript,以便您的鏈接執行發佈請求。如果您沒有包含JavaScript,則執行獲取請求而不是發佈請求。 – Mischa 2012-04-24 07:00:27

+0

如何包含此javascript ...創建也是一個發佈請求不是嗎?我的創建操作正常工作正常,這意味着我的發佈請求正在工作fyn .. – NJF 2012-04-24 07:15:48

+0

創建可能會工作,因爲它是一個帶按鈕的正常形式。這是一個鏈接,所以你需要javascript來使它做一個帖子。您必須將javascript包含在佈局文件的'head'標籤中,如下所示:'<%= javascript_include_tag'應用程序'%>'。其中已包含 – Mischa 2012-04-24 07:21:09

回答

2

爲了做一個鏈接做一個POST請求,您需要的JavaScript。 Rails爲你處理這件事,但你必須包含必要的文件。將<%= javascript_include_tag :defaults %>添加到佈局文件將解決您的問題。如果您不這樣做,將執行GET請求而不是POST請求。

1

您可能希望將您的操作分配給收款人或會員。

resources :memberships do 
    post 'req', :on => :collection # or :member 
end 

請參閱http://guides.rubyonrails.org/routing.html#adding-more-restful-actions

:on => :collection創建像memberships/req的路線,其中
:on => :member給你喜歡memberships/:id/req對象的路由。

+0

但是他已經有了'collection do',這和':on =>:collection'一樣。對於他已有的東西,這只是不同的語法。 – Mischa 2012-04-24 06:58:11

+0

啊,沒有看到,因爲錯誤的代碼格式,你是對的 – pduersteler 2012-04-24 07:07:29

0

由於默認導軌提供了CRUD操作。

new,create,edit,update,delete 

代碼

collection do 
    post 'req' 
end 

將產生如下的路線。

/memberships/req 

所以軌道您所請求誤解/成員/:ID 並試圖action.as在沒有演出的動作它會引發未知的動作,以配合表演。

因此,解決辦法是,你需要告知你不使用CRUD操作

這是可以做到如下

resources :memberships, :only => [] do 
collection do 
    post 'req' 
end 
end 
+0

你是對的問題,但你的解決方案是錯誤的。 Rails認爲他需要演示操作,因爲他正在執行GET請求。如果這是一個POST請求,一切都會好起來的。 – Mischa 2012-04-24 07:42:52

+0

sounder我試過你的解決方案,但我得到新的錯誤,說沒有路由匹配「/會員資格/請求」.. – NJF 2012-04-24 07:53:13

+0

Mischa這是一個請求...當我做耙路線它顯示req_memberships POST /會員資格/請求格式){:controller =>「memberships」,:action =>「req」}這意味着它是一個post請求.. – NJF 2012-04-24 07:54:32