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

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

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

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

Ruby on Rails

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

1回答

1755閲覧

checkboxにハッシュの値を入れて取得する方法

tomtom1

総合スコア168

Ruby

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

Ruby on Rails

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2020/08/28 05:41

編集2020/08/29 05:47

###実現したいこと
type='checkbox'のinputにハッシュの値を入れて、Controllerに投げたいです。
しかし、下記のname=<%= @posts[] %>でエラーが発生します

view

1<%= form_tag "/houses/#{@house.id}/add" do %> 2 <% @posts.each do |post| %> 3 <div class="book-checkbox"> 4 <div class='check-container'> 5 <input type='checkbox' name=<%= posts[] %> id=<%= post.id %>></input> 6 <label for=<%= post.id %>></label> 7 </div> 8 </div> 9 <% end %> 10<%= submit_tag "送信" %> 11<% end %>

Controller

1def add 2 @house = House.find_by(id: params[:id]) 3 @posts= Post.find(params[:posts]) 4 @house.posts << @posts 5 redirect_to("/") 6end

Error

1undefined local variable or method `posts' for #<#<Class:0x00007f8d0a8ae9d8>:0x00007f8d11de8500> 2Did you mean? post

余談ですが、一切のデザインを行なっていないcheckboxですと、以下のようにして、無事に配列取得できます。

View

1<%= check_box_tag "posts[]", post.id %>

ぜひアドバイスのほど、よろしくお願い致します。
###追記
以下のように、変更しましたところ、ページ表示ではエラー発生しなくなりました。
しかし、コントローラーに送った際にエラーが発生します。

view

1<input type='checkbox' name=posts[] id=<%= post.id %>></input>

Error

1Couldn't find Post with 'id'=on

###追記2
2つ選択した状態で、送信されたパラメーターです。

Parameters

1{"utf8"=>"✓", "authenticity_token"=>"Vj2Ch/wa06ok5xamhzKWEOghvu1EXxZDZ1k1rIKE679O4Gybl8B/yCF7FINDpLePbkickrv9nzUmlnKbSVgyPQ==", "posts"=>["on", "on"], "commit"=>"送信", "id"=>"2"}

デザインのないcheck_box_tagではうまくいったので、以下のように挑戦しましたがうまく行きませんでした。

<%= check_box_tag "posts[]", post.id, :id => post.id %>

→すでにクリックされた状態で、クリックしても非クリックできないです。

<%= check_box_tag "posts[]", :id => post.id %>

→アンクリックの状態ですが、chackboxの選択ができない(クリックに反応しない)

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

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

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

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

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

winterboum

2020/08/28 11:06

エラーメッセージを載せましょう
tomtom1

2020/08/28 13:34

わかりづらくて申し訳ありません。 Errorという項目欄に記載してます!
winterboum

2020/08/28 21:01

この1行しかでませんでしたか?
tomtom1

2020/08/29 05:31

はい、一行しかありませんでした!
guest

回答1

0

ベストアンサー

<input type='checkbox' name=<%= posts[] %> id=<%= post.id %>></input>
<input type='checkbox' name='posts[]' id=<%= post.id %>></input> にすれば通るでしょう。ただ多分やりたいのは
<input type='checkbox' name='posts[]' value='<%= post.id %>'></input>です。
これと「一切のデザインを行なっていないcheckbox」という<%= check_box_tag "posts[]", post.id %> との違いがわからないのですが、ともに一切デザインなし、だと。。。。
で、check_box_tag "posts[]", post.id でよいのではと思うのですが、なにが問題なのでしょう。

投稿2020/08/28 23:43

winterboum

総合スコア23567

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

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

tomtom1

2020/08/29 05:41 編集

valueではなく、idで正しいです。idをつけてlabelのforと関連付けています。 ですが、nameのハッシュを送りたいのですが、ちゃんと送れません。 気になったところが、id='on'というところですが、これが誤りでしょうか? パラメータを追記2に追加しました。
winterboum

2020/08/29 09:07

送る値は何を送るのでしょう?
tomtom1

2020/08/29 13:18 編集

複数のPostの配列です!言い方が正しいかわかりませんが、 Controllerの二行目の@posts= Post.find(params[:posts])が受け取りたい内容です
winterboum

2020/08/29 13:46

Postの配列ではなく、postのidの配列ではないのですか? ですと id=<%= post.id %> だけでなく、送る値として value='<%= post.id %>'も必要です
tomtom1

2020/08/31 05:17

無事できました!ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問