Help us understand the problem. What is going on with this article?

【Rails】リソースベースのルーティングを忘れていて無駄に苦労した件

大学でRuby on Railsを習いました。
せっかくなのでRuby on Railsを使ってTodoリストを作ってみようと思ったら、早速ルーティングで詰みました。
createのルーティングで詰んでました。

環境

Rails v5.2.4.3
Ruby v2.5.1

やりたかったこと

index.html.erbでform_forメソッドを使いcreateへデータを送信する。
index.html.erbに入力スペースを用意して、そのままデータを作れるようにしたかったんです。

lists_controller.rb
def index
    @list = List.new()
end

def create
    @list = List.new(params[:list])
    if @list.save
        redirect_to({ action: :index }, notice: 'やることリストを追加しました')
    else
        ridirect_to({ action: :index }, notice: 'やることリストを追加できませんでした')
    end
end
index.html.erb
<%= form_for @list, :url => { action: "create" } do |form| %>
    <table>
        <tr>
            <th><%= form.label :text, "内容" %></th>
            <td><%= form.text_field :text %></td>
        </tr>
        <tr>
            <th><%= form.label :deadline_at, "締め切り" %></th>
            <td><%= form.datetime_field :deadline_at %></td>
        </tr>
    </table>
    <%= form.submit %>
<% end %>
routes.rb
root "lists#index"
post "lists"

まあ、結論から言うとエラーが出たんです。

controller key on routes definition, please check your routes.

検索しても検索しても、「rootのルーティングを『〇〇/index』にしているので『〇〇#index』にしてください!」みたいなのしかでてこん。
そこはやってたんよ。

なんか、create用のルーティングにcontrollerとactionを書いてあげたら動くようになりました。

routes.rb
post "lists", controller: "lists", action: "create"

とここまで長々とお話ししましたが

気がついたんです。
リソースベースのルーティングってなんかなかったっけ、、、
授業内でcreateのルーティング書いたっけ、、、

はい。

routes.rb
resources :lists

これひとつ書けば、ListsControllerに対してindexnewcreateshoweditupdatedestroyのアクションのルーティングが設定できるんですよね!!
もう完全に忘れていました!!!
と言うか授業で教わったときには意味が全然わかってなくて、今回やっと理解できたと言う感じでしたね、、、復習頑張ります。

この場面ではrootで設定しているindex以外ではcreateしか使っていないので、

routes.rb
root "lists#index"
resources :lists, :only => :create

でも問題なく動作しました。
しかし、これからいろいろ機能をつけていく予定なのでcreate以外も使えるようにしておきます。

はい。
お疲れ様でした!!!

wata-516e
ただの大学生です。 勉強中に迷った点などをメモして置く場所がほしかったのでここに投稿していこうと思いました。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away