LoginSignup
0
0

More than 3 years have passed since last update.

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

Last updated at Posted at 2020-07-01

大学で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以外も使えるようにしておきます。

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

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0