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

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

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

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

Q&A

解決済

1回答

1812閲覧

Railsでlink_toを用いたform送信をしたい。

hatsu

総合スコア1809

Ruby on Rails

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

0グッド

1クリップ

投稿2017/12/24 01:06

現在、rails5,ruby2.4.0の環境にてform_tagを用いて投稿ができるものを作ろうとしています。formの送信はできるものの、contentの値がどうもcontrollerのcreateアクションに渡っていないらしく、contentがnilになってしまいます。
実際書いているのは下記のコードです。

ruby

1// views/posts/new.html.erb 2<h1>NewPost</h1> 3<div class='form'> 4 <div class='form-body'> 5 <%= form_tag("/posts/create",:id => "form_id") do %> 6 <textarea name="content" id="content"></textarea> 7 <%= link_to 'post',{controller: "posts", action:"create",:onclick=>"document.getElementById('form_id').submit()"},method: :post %> 8 <% end %> 9 </div> 10</div>

ruby

1// controllers/posts/posts_controller.rb 2class PostsController < ApplicationController 3 def index 4 @posts = Post.all.order(created_at: :desc) 5 end 6 7 def show 8 @post = Post.find_by(id: params[:id]) 9 end 10 11 def new 12 end 13 14 def create 15 @post = Post.new(content: params[:content]) 16 @post.save 17 redirect_to("/posts/index") 18 end 19 20end 21

できていないところはおよそtextareaのname="content"の値をlink_toにどのように渡し、controllerのcreateメソッドに送るかかと考えておるのですが、色々と調べてみても回答が見つからなかったです。

この回答がわかるかた、ぜひともご教授ください。
よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

ビューからコントローラーへうまく値が渡っていないぽいときは,ともかくログを見ます。
あるいは,ログファイルを見なくても,rails server したターミナルに刻々と表示が出ますから,これを見れば OK です。

そうすれば,ブラウザーからどんなリクエストがあって,ルーティング定義に照らしてどのように解釈されてどんなパラメーターが抽出されて,どのコントローラーのどのアクションに渡って,ということがたちどころにわかります。

例えば

Started POST "/posts/create" for 127.0.0.1 at 2017-12-24 10:57:49 +0900 Processing by PostsController#create as HTML Parameters: {云々

だったら,/posts/create というパスに POST メソッドで来てて,PostsController の create アクションが呼び出されて,そのときのパラメーターが云々,と分かります。

さて,問題のコードですが,フォームの書き方がだいぶおかしいようです。
Rails Tutorial とかで基本からもう一度学ばれてはいかがでしょうか。

例えば,form_tag"/posts/create" を渡しているのですが,こういうパスはふつう使いません。

一度新しい rails アプリを作って,

rails g scaffold post content:text

とやって出てくるコード群と見比べてみては。

投稿2017/12/24 02:10

scivola

総合スコア2108

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

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

hatsu

2017/12/27 04:53

pry-railsのgemを使用したところ、コントローラーではparams[content]をsaveするようにしているものの、link_toで渡しているあたいは、params[:post][:content]であったため内容が保存されていなかったと判明いたしました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問