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

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

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

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

Q&A

解決済

1回答

965閲覧

f.selectで初期値が設定されない(修正済)

reol-777

総合スコア14

Ruby on Rails

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

1グッド

1クリップ

投稿2021/04/01 13:29

編集2021/04/18 00:39

rails初学者です。以下のコードで

new.html.erb

<%= form_with model: @word, local: true do |f| %> <div class="create_word"> <p>単語</p> <div><%= f.text_field :word %></div> </div> <div class="create_word_meaning"> <p>意味</p> <div><%= f.text_field :meaning %></div> </div> <div class="part_of_speech"> <p>品詞</p> <div><%= f.select :part_of_speech, options_for_select([["動詞", "動詞"],["名詞", "名詞"],["副詞", "副詞"],["形容詞", "形容詞"],["熟語", "熟語"]], params[:part_of_speech]) %></div> </div> <%= f.hidden_field :user_id, :value => @current_user.id %> <div class="create_button"><%= f.submit %></div> <% end %>
<div><%= f.select :part_of_speech, options_for_select([["動詞", "動詞"],["名詞", "名詞"],["副詞", "副詞"],["形容詞", "形容詞"],["熟語", "熟語"]], params[:part_of_speech]) %></div>

↑のようにしているのですが初期値が前回選択した値になりません。
どのようにすればよいですか?

controller

1def create 2 @word = Word.create(word_params) 3 redirect_to new_word_path 4end 5 6def new 7 @word = Word.new 8end 9 10private 11def word_params 12 params.require(:word).permit(:word,:meaning,:user_id,:part_of_speech) 13end

・追記
ご指摘の通り修正しました。

shinoharat👍を押しています

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

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

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

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

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

winterboum

2021/04/01 22:58

「初期値が前回選択した値になりません。」ということですが、「前回選択した」あと、このviewを呼び出しているcodeを載せてください
winterboum

2021/04/15 05:39

「前回選択した」あと、このviewを呼び出しているcodeを載せてください
shinoharat2

2021/04/17 06:22

winterboum さんも質問されていますが、 ・どのアクションからこの view を呼び出しているのか? ・その呼び出し元のコードはどういう風に書いているのか? が分からないため回答するのが難しいです。 create では無いですよね?
guest

回答1

0

ベストアンサー

追記ありがとうございます。
リダイレクト先が「words_path」から「new_word_path」に変わってますね。
もしかして「連続データ登録」みたいな機能を実装中なのでしょうか。
なんとなく話が見えて来た気がします。

実現したい動作は、

【1】new を表示(初回は、単語・意味・品詞が未入力の状態)
【2】それぞれの値を入力して登録ボタンを押下
【3】create が実行され、データがDBに登録され、new にリダイレクトされる
【4】リダイレクト先の new で、
・「単語」と「意味」はリセットする(空欄にする)
・「品詞」は前回選択した値にする

って感じでしょうか。

コントローラーを以下のように修正すれば、リダイレクト先の new に part_of_speech を渡すことができます。
お試しください。

diff

1 def create 2 @word = Word.create(word_params) 3- redirect_to new_word_path 4+ redirect_to new_word_path(part_of_speech: word_params[:part_of_speech]) 5 end

投稿2021/04/18 01:50

shinoharat2

総合スコア73

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

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

reol-777

2021/04/18 05:46

回答ありがとうございます! 無事できました! p.s.説明の至らないとこがあり、申し訳ありません。以後気を付けます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問