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

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

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

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

HTML

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

Q&A

解決済

2回答

434閲覧

form_for コントローラーに値が渡されない

yakumo02

総合スコア103

Ruby on Rails

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

HTML

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

0グッド

1クリップ

投稿2020/05/30 08:41

編集2020/05/30 11:56

お世話になります。form_forで入力したデータが保存されません。
コントローラーのcreateアクションでbinding.pryを使い、@tweetの中身を確認した所nillでした。
form_forの書き方に問題があると思いましたが、分かりませんでした。
コントローラーに値を渡すにはどうすれば良いでしょうか?ご教授お願いします。

routes

Rails.application.routes.draw do devise_for :users root 'tweets#index' get 'tweets' => 'tweets#index' get 'tweets/new' => 'tweets#new' post 'tweets' => 'tweets#create' end

tweets_controller

def index @tweets = Tweet.includes(:user) end def new @tweet=Tweet.new(tweet_params) end def create @tweet=Tweet.create(text: tweet_params[:text],title_info: tweet_params[:title_info],user_id: current_user.id) if !@tweet.save render "new" end end private def tweet_params params.permit(:text,:title_info,:user_id) end

new.html.erb

<div class="contents row"> <div class="containe_r"> <%= form_for @tweet do |form| %> <h3> 投稿する </h3> <%= render 'layouts/error_messages', model: form.object %> <%= form.text_field :title_info,placeholder: "サブタイトル",class: "game_record",value: "#{@tweet.title_info}" %> <%= form.text_area :text, cols: 30 ,rows: 10,value: "#{@tweet.text}" %> <%=form.submit value: "SENT",class: "game_record"%> <% end %> <div class="back"> <%= link_to "戻る",root_path%> </div> </div> </div>

以下のform_tagで実装すると保存できたので、やはりform_forがおかしいかと思います

<%= form_tag('/tweets', method: :post) do %> <h3> 投稿する </h3> <input placeholder="タイトル" type="text" name="title_info"> <textarea cols="30" name="text" placeholder="text" rows="10"></textarea> <input type="submit" value="SENT"> <% end %>

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

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

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

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

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

guest

回答2

0

ベストアンサー

①tweet_paramsはフォームにいれられた値をとる為のメソッドなのでnewアクションの段階では引数にとれない。

②createはnew + saveなのでsaveで条件分岐したければcreateは使えない

③tweet_paramsの中身に関してはparamsをbinding.pry等で見てみてください。あと、フォームにはuser_idの値を入れる欄がなく、初めからcurrent_userだとわかっているのでmergeします。この辺はストロングパラメータで調べてみてください。まずは型として覚えるのでいいと思います。

④tweet_paramsできちんと整形されるのでcreateアクションのnewにそのまま引数として入れる。

こんな感じですかね。

投稿2020/05/31 04:17

annaPanda

総合スコア130

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

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

0

def new @tweet=Tweet.new end def create @tweet=Tweet.new(tweet_params) if !@tweet.save render "new" end end private def tweet_params params.require(:tweet).permit(:text,:title_info).merge(user_id: current_user.id) end

いかがですか?

投稿2020/05/30 16:04

annaPanda

総合スコア130

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

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

yakumo02

2020/05/31 02:08

ありがとうございます!できました。 宜しければ原因を教えていただけないでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問