0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ヘルパーメソッドのパスを知る!

Posted at

はじめに

本記事では、form_withについてまとめました。
本日、深掘りした内容になりますので、アウトプットいたします。

ヘルパーメソッド

Railsにおける、主にビューでHTMLタグを出現させたり、
テキストを加工するために使用されるメソッドの総称です。
以下のようなものがあります。

ヘルパーメソッド 使用用途
form_with 投稿ページなど、情報を送るためのフォームの実装
link_to リンクの実装

他にもたくさんのヘルパーメソッドがありますが、初めに学習するものは上の2つです。

パスについて

パスの指定方法は、大きく分けて2種類あります。
①URL(URIやPrefixを記述する方法)
②modelオプション

URL(URIやPrefixを記述する方法)

例えば、

<%= link_to "編集する", edit_prototype_path(@prototype), class: :prototype__btn %>

edit_prototype_path(@prototype)
ここの部分です。

データベースに保存しないパスの方法としてよく用いられております。
レコードに生成した情報を保存・追加しないということです。

これまで学習したアプリケーションを確認していると
index→showに画面遷移する際など、直接的にデータを保存せず、
ただページを遷移する際に多く使われている印象です。

「url:」の有無

付けることによる弊害は特に無いです。
付けるか付けないかは、保存先のコントローラーでない場合には付けます。
↑後述のFormオブジェクトの話です。

不安であれば、付けておけば問題ありません。

modelオプション

例えば、

<%= form_with model: prototype, local: true do |f|%>

model: prototype
ここの部分です。

データベースに保存するパスの方法としてよく用いられております。
URLの逆で、レコードへ生成したものを保存・追加するということです。
ですので、newや、editのファイルで使用されている印象があります。

削除するためのパス

<%= link_to "削除する", prototype_path(@prototype), method: :delete, class: :prototype__btn %>

prototype_path(@prototype)
ここの部分です。

こちらについては、両方用いられております。
URLの方が見やすく、使用しやすいため、URLを利用されることが多いです。

URLとmodelオプションの両方を使う場合

例えば、

<%= form_with id: 'charge-form',url: item_purchases_path(@order_form) ,model: @order_form ,class: 'transaction-form-wrap',local: true do |f| %>

url: item_purchases_path(@order_form) ,model: @order_form
ここの部分です。
前述での、url:を付けるかどうかの話はここです。

2つ使う理由

Formオブジェクトを使う際に、両方使用します。

例えば、商品を購入する際、
発送する住所のテーブル購入記録のテーブルに対して、
Formオブジェクト(上のコードではorder_formをFormオブジェクトにしています)を使っているとします。

当時の私はこう考えました。

購入ページへ遷移後、
その購入ページから購入ボタンを押し、
発送する住所購入記録の情報を保存するものだと考えていたため、
まずここでは、modelオプションを使うのだと思いました。

ただ、ここでは、Formオブジェクトを使用しているため、
order_formへ保存をしたいわけではなく、
その後から、発送する住所と購入記録に仕分けし、
それらへ保存したいため、やはりmodelオプションは使わず、
URLパスを使用する、と判断しました。

しかし、発送住所と購入情報のデータに保存をするためには、
order_formを通って一時的にorder_formへ送らないといけない(保存みたいな?)ことから、
2つ(URLとPrefix)を使用するのだと思いました。

要するに、
情報をテーブルに保存するために、
中間にいるFormオブジェクトへワンクッション置いて(URL)、
正式なテーブルへ保存(Prefix)する、そんなニュアンスです。
フォーム送信
↓
Formオブジェクト(ここでワンクッション)
↓
いろんなテーブル(今回だと発送する住所と購入記録のテーブル)

他に使用するケース

ほとんどないと思います。
例えば、
modelオプションを使用しても、画面が遷移されない時
とかだと思います。

終わりに

この辺は私にとってかなりの鬼門でした。
なかなか理解できず、
うまくパスが記述できずに、エラーが出続けておりました。

毎日のように深掘りしなければ理解できないことばかりですが、
理解できて、それをコードで上手く表現できた時が一番嬉しいですし、
報われたみたいで、幸せになれます🤗

明日も頑張ります!!

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?