2012-04-24 14 views
2

メンバーシップコントローラ内にカスタムアクションreqを作成し、そのルートを定義しました。ただし、link_toにそのカスタムアクションのパスを渡すと、その不明なアクションを示すエラーが表示されます。 MembershipsController.I dnyに見つかりません。私のカスタムアクションへのパスを与えているときに、showアクションが見つかる理由を理解しています。私のメンバーシップコントローラの内部には、showアクションはありません不明なアクションエラー

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 

会員コントローラ内に続いて

は私のカスタムアクションです。

には、以下の私のカスタムアクションのためのルートです:..私はカスタムアクションのパスを与えている私のgroups/show.html.haml内部コード

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

続いている

- 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" 

iは、要求をクリックしてください

私はshowアクションのためにその未知のアクションエラーを取得しています。私はここで間違って何をしていますか?

+1

Railsのjavascriptが含まれていますか? Railsはjavascriptを使用しているので、あなたのリンクは投稿要求を行います。 JavaScriptを含まない場合は、ポストリクエストではなくgetリクエストを実行します。 – Mischa

+0

このjavascriptを含めるにはどうすればいいですか?createはポストリクエストでもないですか?私の作成アクションはうまくいきます。つまり、私のポストリクエストはfyn ..で動作しています。 – NJF

+0

ボタンが付いた通常のフォームなので、Createはおそらく動作します。これはリンクなので、投稿するにはjavascriptが必要です。レイアウトファイルの 'head'タグにjavascriptを含める必要があります:' <%= javascript_include_tag 'application'%> '。 – Mischa

答えて

2

次のように行うことができますを使用していないことを通知する必要があります。 Railsはこれを処理しますが、必要なファイルを含める必要があります。 <%= javascript_include_tag :defaults %>をレイアウトファイルに追加すると、問題が解決します。これをしないと、POST要求の代わりにGET要求が実行されます。

1

あなたの行動をコレクションまたはメンバーに割り当てることができます。

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

http://guides.rubyonrails.org/routing.html#adding-more-restful-actionsを参照してください。

:on => :collection
:on => :memberはあなたにmemberships/:id/reqようなオブジェクトのためのルートを提供しますmemberships/reqのようなルートを作成します。

+0

しかし、彼はすでに 'collection do'を持っています。これは':on =>:collection'と同じです。これは彼がすでに持っているものとは異なる構文です。 – Mischa

+0

ああ、間違ったコードの書式設定のため、正しいとは思わない – pduersteler

0

デフォルトでは、レールはCRUDアクションを実行します。

new,create,edit,update,delete 

コード

collection do 
    post 'req' 
end 

は、以下のようにルートを作成します。

/memberships/req 

だから、あなたが要求している誤解/会員/レール:ID をし、それが未知のアクションを提起何のshowアクションはありませんaction.asショーを一致させようとします。

だから解決策は、あなたがCRUDアクション

JavaScriptを必要とする、リンクをPOSTリクエストを行うようにするには

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

あなたは問題については正しいですが、あなたの解決策は間違っています。 Railsは、GETリクエストを実行しているので、showアクションが必要だと思っています。それがPOSTリクエストであれば、すべてがうまくいくでしょう。 – Mischa

+0

sounder私は解決策を試しましたが、 "No members/req"と一致する新しいエラーが発生しました。 – NJF

+0

Mischa投稿リクエストです... rake routesを実行すると、req_memberships POST/membership/req(:私が上で説明しようとしているように: – NJF