Railsに推測してもらうのが気持ち悪かったので、体系的に学んだ

書籍「現場で使えるRuby on Rails 5 速習実践ガイド」
Chapter3 タスク管理アプリケーションを作ろう
3-3-3詳細表示機能を実装する
112ページより



-@tasks.each do |task|
  tr
    td= link_to task.name, task
    td= link_to task.created_at, task


についてのlink_toの説明で、URLは"task"というオブジェクトからRailsが推測して作ってくれます。という説明が少し気持ち悪かったので、推測ではない、任意のものを指定する方法を備忘録として記載した。

  • taskはブロック変数である|task|のこと

  • @tasksはコントローラであるTasksControllerクラスのメソッドindexより@tasks = Task.all のオブジェクトを代入されたインスタンス変数のことである。

  • 記法はslim。

そもそもIink_toメソッドは
<%= link_to 'Yahooへ移動する', "http://www.yahoo.co.jp/"=%>
のようにリンクを書くので、上のような書き方にするには


  td= link_to task.name, "/tasks/#{task.id}"
  td= link_to task.name, "/tasks/#{task.id}"

とすればいい。
ちなみに、task(@tasks)には : id ,:name ,:description ,:created_at,:updated_atがハッシュとして格納されている。

ただ、これだと書き方が冗長になり、変更の際に書き直しがめんどくなるということで、URLヘルパーメソッドを利用する。参考にしたサイトはこちら

ターミナルでrails routesと打てばパスとヘルパーメソッドの関係が確認できるので、使用する際は参照する。

パスは/task/:id 対応するヘルパーメソッドはtask_path(:id)なので、

td= link_to task.name, task_path(task.id)
td= link_to task.created_at, task_path(task.id)

と打てばOK。
ちなみに余談ですが、先ほど紹介した記事でもヘルパーメソッドの中で

ヘルパーメソッドにはidを指定して渡す必要がなく、post.idとしなくても@postsから取り出したpostを渡すだけでidを判断してくれます。これさえ知っておけば応用的な使い方は調べながら習得できると思います。

https://qiita.com/Shugo_Y/items/412d7660f259eddf9c66

と書かれていたので、気持ち悪いけど慣れて使っていこうと思う。

この記事が気に入ったらサポートをしてみませんか?