QA@IT

Rails4 Viewから異なるControllerのアクションメソッドを実行(link_to)

5091 PV

アイテムの一覧(views/items/index.html.erb)にこのようなリンクをはり、

<%= link_to 'お気に入りへ追加', :controller => 'favoriteships', :action => 'create', :item_id => marketprice.item.id, :user_id => current_user.id %>

お気に入りのコントローラ(/controllers/favoriteships_controller.rb)でこのようにしてお気に入り登録をしたいと思っています。

class FavoriteshipsController < ApplicationController
    def create
        @favoriteship = Favoriteship.create(params_favoriteship)
    end

    private
        def params_favoriteship
            params.permit(:item_id, :user_id)
        end
end

動作させてみるとお気に入りへ追加にリンクされているURLは

http://localhost:3000/favoriteships?item_id=13&user_id=6

となり、これをクリックしてみると

Unknown action
The action 'index' could not be found for FavoriteshipsController

と、createメソッドではなくなぜかindexメソッドを見に行っています。これはなぜでしょうか?おわかりになる方ご教授ください!よろしくお願いします!

回答

html: {method: :post} をつけると期待した結果になるかもしれません。
ですが、_path を使った書き方を覚えた方がよいと思います。
Rails 流の routes の習得です。

編集 履歴 (0)
  • 友人にも同じ指摘を受けて以下のようにしたら動作しました!ありがとうございます!
    <%= link_to 'お気に入りへ追加', favoriteships_path(:item_id => item.id, :user_id => current_user.id), :method => 'post' %>
    -
ウォッチ

この質問への回答やコメントをメールでお知らせします。