0

RESTの「new」と同じような動作をする「campaign」というカスタムアクションを同じコントローラーに追加したいのですが、目的が違うので分けたいと思いました。このキャンペーン フォームには追加のフィールドがいくつかあるためです。もう 1 つの方法は、追加のパラメーターを「新規」アクションに渡し、通常の「新規」アクションとカスタム「キャンペーン」で異なるテンプレートをレンダリングすることです。でも、なぜうまくいかなかったのかを知りたい。

したがって、次のルートを思いつきます (「メッセージ」は、「新規」アクションと「キャンペーン」アクションの両方を持つコントローラーです)。

get 'users/:user_id/messages/campaign', as: :campaign_user_message

また

resources :users do
   resources: messages do
      member do
        get 'campaign'
      end
   end
end

コンソール出力で、これを行うため、 ActiverRecord:RecordNotFound を取得しています。

Started GET "/users/1/messages/campaign" for 127.0.0.1 at 2012-12-22 00:14:38 -0800
Processing by MessagesController#show as HTML
Parameters: {"user_id"=>"1", "id"=>"campaign"}

私はこの方法でアクションを呼び出しています:

link_to campaign_user_message_path(@user)
4

2 に答える 2

1

「/users/1/messages/campaign」などのルートが必要な場合は、次のように書く必要があります。

resources :users do
 resources :messages do
    collection do
      get 'campaign'
    end
 end
end

あなたのやり方で(member do ... endで)書くと、コードはURL「/users/:user_id/messages/:id/campaign」を生成します。@user と @message を渡す必要があります。

link_to campaign_user_message_path(@user, @message)
于 2013-01-08T09:36:41.623 に答える
0

私はこのようなことを上記の問題に克服しました:

resources :users do
    get 'messages/new_campaign' => 'messages#new_campaign'
    post 'messages/create_campaign' => 'messages#create_campaign'
end

したがって、URLヘルパー「user_messages_new_campaign」を使用して、アクション/ users /:user_id / messages/new_campaignを取得できます。

于 2013-01-08T00:46:08.247 に答える