2

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

以下は、メンバーシップコントローラー内のカスタムアクションです

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

メンバーシップコントローラー内に表示アクションはありません。

以下は私のカスタムアクションのルートです:

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"

参加のリクエストをクリックすると、showactionの不明なアクションエラーが発生します。私はここで何が間違っているのですか?

4

3 に答える 3

2

リンクにPOSTリクエストを実行させるには、javascriptが必要です。Railsがこれを処理しますが、必要なファイルを含める必要があります。レイアウトファイルに追加<%= javascript_include_tag :defaults %>すると、問題が解決します。これを行わないと、POSTリクエストの代わりにGETリクエストが実行されます。

于 2012-04-24T08:09:59.103 に答える
1

アクションをコレクションまたはメンバーのいずれかに割り当てることができます。

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

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

:on => :collectionのようなオブジェクトのルートを提供するmemberships/reqwhereのようなルートを作成します。
:on => :membermemberships/:id/req

于 2012-04-24T06:48:28.447 に答える
0

デフォルトとして、railsはCRUDアクションを提供します。

new,create,edit,update,delete

コード

collection do
  post 'req'
end

以下のようなルートを作成します。

/memberships/req

したがって、railsは、/ memberships /:idを要求していると誤解し、showアクションと一致させようとします。showアクションがないため、不明なアクションが発生します。

したがって、解決策は、CRUDアクションを使用していないことを通知する必要があることです。

それは以下のように行うことができます

resources :memberships, :only => [] do
 collection do
   post 'req'
 end
end
于 2012-04-24T07:37:49.707 に答える