質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

3回答

898閲覧

form_forヘルパータグ ruby on rails

Kousukeh10969

総合スコア20

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2019/03/24 14:53

**form_for ヘルパーに関して*### * ruby on rails

ex app/views/posts/new.html.erb 上

<h1>新規投稿</h1> <!-- form_for部分 --> <%= form_for(@post) do |f| %>
<h4>タイトル</h4> <%= f.text_field :title %> <h4>本文</h4> <%= f.text_area :body %> <%= f.submit '投稿' %>

<% end %>

というコードがあって、投稿ボタンを押すと
/posts ページに行き、app/config/routes.erb上で
post "/posts" => posts#create を設定しているため、postscontrollerのcreateアクションが引き出されるのはわかるのですが、

そもそもどうして投稿ボタンを押すと/postsページにアクセスされるのでしょうか?どこかで定義されているのでしょうか?
(link_toタグなどで定義する必要はないのか???)

それとも元々<%= f.submit '投稿' %>の定義でpostアクションを起こすことが決まっているのでしょうか?

教えていただきたいです。よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

form_for(@post)

@postがPostのインスタンスだからです。
Postクラスにはmodel_nameというメソッドが親クラスにより定義されており
'post'が得られます。

このモデル名からposts_pathという_pathヘルパー名を作成し呼び出す事で
/postsという送信先を推定し設定しています。

投稿2019/03/24 15:39

asm

総合スコア15147

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

form_forは、View_Helperの一つで、モデルと紐付けしてデータの改変や作成などを行なっています。つまり、createやupdateなどを担っています。

また、

<%= form_for(@post) do |f| %>

のform_forの中に入っている@postというインスタンスですが、resources:を使っている場合は自動的に飛び先とparamsの名前空間(post)が設定されていて、@postが空の時(@post = Post.new)はcreateアクションへ、単一データの場合(@post = Post.find(n))はupdateアクションに自動で移動するようにできています。

余談ですが、resourcesの範囲外である場合に関しては、名前空間と飛び先を以下のように設定する必要があるので注意してください。

form_for(:session, url:login_path) # sessionは名前空間、login_pathは飛び先です。

ですので、この場合、submitの時点でpostのHTTPリクエストが発生して、Rails内のルータが送り先のコントローラを判別することをしています。詳しくは、Webブラウザの検証のNetworkタグのHeaderを見ると分かると思います。ストロングパラメータの説明ですが、こちらを参考にすると、実際にpostしたものをどのように検証すれば良いか簡単に分かるかもしれないです。
https://www.transnet.ne.jp/2016/05/18/rails%E5%88%9D%E5%AD%A6%E8%80%85%E3%82%B9%E3%83%88%E3%83%AD%E3%83%B3%E3%82%B0%E3%83%91%E3%83%A9%E3%83%A1%E3%83%BC%E3%82%BF%E3%83%BCcolnr/

ビューヘルパーに関しては、以下のURLにまとめて説明があるので、良かったら参考にしてください。
https://ruby-rails.hatenadiary.com/entry/20150113/1421149061#view-helpers-form

投稿2019/03/24 15:16

bamboo-nova

総合スコア1408

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

<%= form_for(@post) do |f| %>

こちらの@postは新規インスタンスが入っていると思います。(Post.new)
この場合のHTMLは以下のようになってます。

<form action="/posts" method="post">

新規インスタンス@postをformの引数に渡したときは、内部的に posts_path URLヘルパメソッドを生成します。
このURLヘルパがaction属性に設定されるわけですね。
action属性は HTTPリクエストURL になります。つまり、このフォームの送信先URLということです。
formのデフォルトのHTTPメソッドはpostになりますので /posts + post がHTTPリクエストになります。
ブラウザでHTMLソースを確認してみてください。

投稿2019/03/24 18:58

ykp_yk

総合スコア654

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Kousukeh10969

2019/03/25 05:10

質問に答えてくれた3名の皆様、ありがとうございました。一番質問に的確に答えてくれたykp_yk様にベストアンサーを送りたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問