🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Ruby on Rails 6

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

checkbox

checkboxは、GUIのエレメントです。また、HTML<input>タグのtype属性で扱われる値を指します。

Q&A

解決済

1回答

390閲覧

Checkboxで選んだ項目の表示について

szngk

総合スコア14

Ruby on Rails 6

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

checkbox

checkboxは、GUIのエレメントです。また、HTML<input>タグのtype属性で扱われる値を指します。

0グッド

0クリップ

投稿2021/02/07 21:59

編集2021/02/10 13:10

words/index ページに、英単語→日本語訳の表を表示しています。
(seeds.rbのCSVをindexに表示。)

英単語にチェックボックスをつけ、選択した英単語だけ、words/requestページに表示させたいのですが、エラーはないのですが表示できません。どうしたらいいでしょうか?

また、<%= form_tag("/words/request") do %>と、<input type="checkbox" name="choice" value="word_id”>の箇所を、form_withに変更するにはどうしたらいいでしょうか?
(Mac OS Big Sur Ruby 2.6.3 Rails 6.0.0)

seeds.rb

ruby

1require "csv" 2 3CSV.foreach('db/word.csv', headers: true) do |row| 4 Word.create( 5 enword: row['enword'], 6 jaword: row['jaword'], 7 ) 8end

schema.rb

ruby

1create_table "words", force: :cascade do |t| 2 t.text "enword" 3 t.text "jaword" 4 t.datetime "created_at", precision: 6, null: false 5 t.datetime "updated_at", precision: 6, null: false 6 t.boolean "choice" 7 end

words_controller

ruby

1def index 2 @words = Word.all 3end 4 5def request 6 if params[:choice] == true 7 @words = Word.where(id: params[:choice]) 8 @words.save 9 end 10end 11------- 12def word_params 13 params.require(:word).permit(:id, :enword, :jaword, choice:[]) 14end

words/index.html

ruby

1<%= form_tag("/words/request") do %> 2 ------------------------ 3 <tbody> 4 <% @words.each do |word| %> 5 <tr> 6 <td><input type="checkbox" name="choice[]“ value="word_id”></td> 7 <td><%= word.enword %></td> 8 <td><%= word.jaword %></td> 9 <td><%= link_to 'Show', word %></td> 10 <td><%= link_to 'Edit', edit_word_path(word) %></td> 11 <td><%= link_to 'Destroy', word, method: :delete, data: { confirm: 'Are you sure?' } %></td> 12 </tr> 13 <% end %> 14 </tbody> 15 </table> 16 <input type="submit" value="選択"> 17 <% end %>

words/request.html

ruby

1 <tbody> 2 <% if @words.present? %> 3 <% @words.each do |word| %> 4 <tr> 5 <td><input type="checkbox" name="choice" value="word_id"></td> 6 <td><%= word.enword %></td> 7 <td><%= word.jaword %></td> 8 </tr> 9 <% end %> 10 <% end %> 11 </tbody> 12</table> 13<input type="submit" value="保存">

ターミナル (3個選択の場合)

ruby

1Parameters: {"authenticity_token"=>"p0Ww3K/qyDgUybK2f78n1peVYpwz5c7gu4Qo1T4XvQs4Ionjw6+myty+2SHp3mJwsBIORdMRcCH03zwHKVgzGA==", 2 "choice"=>["word_id", "word_id", "word_id"]}

追記

word.csv (今回は練習でできれば将来csvファイルを増やしたいのですが--。)

ruby

1id,enword,jaword 21,apple,りんご 32,orange,オレンジ 43,red,54,black,65,white,76,tree,87,mountain,98,sky,109,star,1110,day,

words/index.html
(以下のような形式にすべきでしょうか? 現在はroutesの不具合等でエラーが出ます)

ruby

1<%= form_with model: @words, local: true do |f| %> 2 <%= f.check_box :choice %> 3 <%= f.submit %> 4 <% end %> 5 6<table class="table-responsive table table-striped table-bordered"> 7 <thead> 8 <tr> 9 <th></th> 10 <th>English</th> 11 <th>Japanese</th> 12 <th collapse="3"></th> 13 </tr> 14 </thead> 15 16 <tbody> 17 <% @words.each do |word| %> 18 <tr> 19 <td><input type="checkbox" name="choice[]" value="word.id" ></td> 20 <td><%= word.enword %></td> 21 <td><%= word.jaword %></td> 22 <td><%= link_to 'Show', word %></td> 23 <td><%= link_to 'Edit', edit_word_path(word) %></td> 24 <td><%= link_to 'Destroy', word, method: :delete, data: { confirm: 'Are you sure?' } %></td> 25 </tr> 26 <% end %> 27 </tbody> 28 </table>

現在のwords/index.html

ruby

1<%= form_tag("/words/request") do %> 2  <table> 3 —————— 4 </table> 5<% end %>

words/index 画面
words/index 画面

words/request 画面
words/request 画面

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

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

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

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

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

m.ts10806

2021/02/07 22:18

csvの内容を提示してください。 あと"と“は全く別の記号であり、HTMLが正しくないのでちゃんと動かない原因になるかと。 「チェックボックスを選択」のあとはどういう操作をする予定ですか? 何かしらでサーバーサイドにリクエストを送る必要がありますが、現状ではそのあたりの要件が見えません。
szngk

2021/02/08 17:47

早速ありがとうございます。 追記にword.csvを追加しました。 チェックボックスを選択→ words/requestで 表示し保存の予定ですが方法がわかりません。 words/index.htmlの形式は、追記のように変更すべきでしょうか?
guest

回答1

0

ベストアンサー

value="word_id” を value=word.id にしてください。
そうしますと
"choice"=>["word_id", "word_id", "word_id"]}
"choice"=>["2", "5", "13"]} の様になりますので、
Word.where(id: params[:choice]) で取れます

def request if params[:choice] == true @words = Word.where(id: params[:choice]) @words.save
params[:choice] == true は常に falseですね。けしてifの中に入りません。if params[:choice].present? に。

すると
@words.save がエラー吐きますね。このsaveは何を意図してます?

投稿2021/02/08 03:43

winterboum

総合スコア23567

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

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

szngk

2021/02/08 17:59

早速ありがとうございます。 @words.saveは、一応保存のつもりでしたが削除しました。 html とwords_controller を以下のように変更すると、 "choice"=>["word.id", "word.id", "word.id"] となります—。 value=“word.id”   (value=word.id も) def request if params[:choice].present? @words = Word.where(id: params[:choice]) end end 質問の表記がまぎらわしくてすみません。 words/indexは、現在は下記のようになっています。 <%= form_tag("/words/request") do %>  <table> ————— </table> <% end %>
winterboum

2021/02/08 23:16

そか、うっかりした value=“<%= word.id %>”
szngk

2021/02/09 10:45

value=“<%= word.id %>” にすると、"choice"=>["1", "2", “3”] になりました。 ありがとうございます! ただ、requestページで選択項目の表示がありません。 また何かありましたらどうぞ宜しくお願い致します。
winterboum

2021/02/09 12:12

「選択項目の表示がありません」とは <td><%= word.enword %></td> <td><%= word.jaword %></td> が表示されない、ということですか?
szngk

2021/02/09 14:20

はいそうです。 requestページでは、表の1行目English・Japaneseだけ表示されます。
winterboum

2021/02/09 22:41

どの controller アクションにに対し、どのviewでの話で、 何件表示されるべき所何行のチェックボックスがある のでしょう
szngk

2021/02/10 12:24

words/indexの表からcheckboxで選択し、words/requestに選択項目だけの表を表示・保存したいと考えています。(現在は練習で、この質問サイトに追記したword.csvファイルで10行です。できれば複数の csvファイルを追加して数百行にしたいのですが—。) 「indexアクションで選択、requestアクションで選択項目表示・保存」すべきでした。 以下の3点を変更しました。 結果は同じで、request画面では表だけ、choice"=>["1", "2", “3”]です。 ①words_controllers indexアクションに下記を追加。 if params[:choice].present?   @words = Word.where(id: params[:choice]) end ②request アクション  空白(表記がわかりません)   ③words/index.html    <%= form_tag("/words/request") do %>を下記に変更しました。    <%= form_with(model: @word, url: words_request_path, local: true) do |form| %>
winterboum

2021/02/10 12:36

質問に答えていただかないと理解が進みません どの controller アクションにに対し、どのviewでの話で、 何件表示されるべき所何行のチェックボックスがある のでしょう
szngk

2021/02/10 13:24

大変すみません。 words controller のindex画面に、seeds.rb の word.csvを表示し、checkboxを追加。 words controller のindexアクションで、checkboxの選択項目を取得して、 words controller のrequest アクションで、checkboxの選択項目を表示・保存。 words/request 画面で、保存したcheckboxの選択項目を表示したいと考えております。 質問コーナーに画面のスクショを追加しました。 10件表示で、10個の checkbox があります。
winterboum

2021/02/10 23:48

みたところ、enword もjawordも表示されていて、「ただ、requestページで選択項目の表示がありません。」という状態ではないとみえますが?
szngk

2021/02/14 13:18

以下のように変更して、選択項目の表示ができました! ありがとうございます! ① words/index.html <%= form_with(model: @word, local: true) do |form| %>  ② words_controller def create if @words = Word.where(id: params[:choice])  render :request end def request @words = Word.where(id: params[:choice]) end ③ routes resources :words do    member do post 'request', to: 'words#request' end end (現在は、checkした項目の表示画面が、/words/request ではなく、/words になってしまいます。この点等その他新しい質問を、後日投稿する予定です—。)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問