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

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

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

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

Ruby on Rails

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

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

Q&A

1回答

603閲覧

投稿フォームのジャンル選択の中でジャンルを増やすためのフォームも作りたい。

ryousukesatou

総合スコア19

Ruby

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

Ruby on Rails

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

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

0グッド

1クリップ

投稿2020/01/14 12:33

編集2022/01/12 10:55

前提・実現したいこと

![イメージ説明
僕は説明するのが難しいと感じたので、写真を貼ってます。やりたいことは投稿フォームのジャンル選択で欲しいジャンルがなかったら、そのジャンルをテキストフィールドで追加できるようにしたいと思っています。そしてそれをajaxでやりたいと思っています。ただそれを投稿フォームの作成の中でできるようにしたいと思っています。ですが、実装の仕方が全然わかりません。
最初にteratailで質問していたので、ジャンル選択の部分は実装できていました。ただ、ただ追加するところは調べてもどうすればいいかわかりません。
アソシエーションなどの説明は説明するよりもコードをみてもらった方が早いと思います。コードは該当箇所のみ記述します。

該当のソースコード

ruby

1コントローラ app/controllers/end_user/posts_controller.rb 2 def new 3 @post = Post.new 4 @genres = Genre.all 5 @genre = Genre.new 6 end 7 8 def create 9 @post = Post.new(post_params) 10 @post.user_id = current_user.id 11 if @post.save 12 flash[:success] = '投稿しました!' 13 redirect_to end_user_posts_path 14 else 15 render action: :new 16 end 17 end 18 19 def add 20 genre = genre.save(genre_params) 21 @genre = Genre.new 22 @genres = Genre.all 23 respond_to do |format| 24 format.html 25 format.js 26 end 27 end 28 29private 30 def post_params 31 params.require(:post).permit(:content, :image,{genre_ids: []}) 32 end 33 34 def genre_params 35 params.require(:genre).permit(:name) 36 end

ruby

1モデル app/models/post.rb 2 has_many :post_genres 3 has_many :genres, through: :post_genres 4 accepts_nested_attributes_for :post_genres

ruby

1モデル app/models/post_genre.rb 2 belongs_to :post 3 belongs_to :genre

ruby

1モデル app/models/genre.rb 2 has_many :post_genre 3 has_many :posts, through: :post_genres 4 validates :name, length: {minimum: 1, maximum: 15}

ruby

1 ビュー app/views/end_user/posts/new.html.erb 2<div class="container"> 3 <div class="row"> 4 <div class="col-sm-8 col-sm-offset-2 form"> 5 <%= form_for @post, url: end_user_posts_path do |f| %> 6 <% if @post.errors.any? %> 7 <%= @post.errors.count %>件のエラーが発生しました。 8 <% @post.errors.full_messages.each do |message| %> 9 <ul> 10 <li><%= message %></li> 11 </ul> 12 <% end %> 13 <% end %> 14 15 <div class="row"> 16 <%= render 'genre' %> 17 </div> 18 <div class="row"> 19 <div class="col-sm-6 col-sm-offset-3"> 20 <%= f.attachment_field :image %> 21 </div> 22 </div> 23 <br> 24 <div class="row"> 25 <div class="col-sm-6 col-sm-offset-3"> 26 <%= f.text_area :content, class:"form-control", rows:"3", placeholder:"コメントここに" %> 27 </div> 28 </div> 29 <hr> 30 <div class="row"> 31 <div class="col-sm-6 col-sm-offset-3"> 32 <%= f.submit "投稿", class:"btn btn-primary btn-block" %> 33 </div> 34 </div> 35 <% end %> 36 </div> 37 </div> 38</div>

ruby

1パーシャル app/views/end_user/posts/_genre.html.erb 2<div id="genre_form"> 3 <%= f.field model: @genre, remote: true do |f| %> 4 <%= f.text_field :name %> 5 <% end %> 6 <div class="col-sm-6 col-sm-offset-3 form-group" > 7 <%= f.label :genres, class:'control-label' %> 8 <div class="checkbox"> 9 <%= f.collection_check_boxes(:genre_ids, @genres, :id, :name) do |g| %> 10 <%= g.check_box + g.text %> 11 <% end %> 12 </div> 13 </div> 14</div>

javascript

1 app/views/end_user/posts/add.js.erb 2$(#genre_form).html("<%= escape_javascript(render("genre"))");

ruby

1ルーティング 2resources :posts, only: [:index, :new, :create] 3get 'posts/new', to: 'posts#add', as: 'genre'

試したこと

調べてみて、これかなと思ったのが collection_check_boxesとaccepts_nested_attributes_forとf.field_forを使ったフォームだと思いました。ですが、実装の仕方が全然わかりません。

補足情報(FW/ツールのバージョンなど)

バージョン
rails: 5.2.3
ruby: 2.5.5
gemの種類
gem 'bootstrap-sass', '> 3.3.6'
gem 'jquery-rails'
gem 'paranoia'
gem 'refile', require: "refile/rails", github: 'manfe/refile'
gem 'refile-mini_magick'
gem 'kaminari','
> 1.1.1'
gem 'devise'
gem 'pry-rails'

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

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

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

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

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

gouf

2020/01/14 12:55

もし本当に急ぐのであれば クラウドワークスなどのプラットフォームを通じて仕事の依頼を出すのがよいかもしれません
ryousukesatou

2020/01/14 13:06

あ、これはポートフォリオ強化のためにやっています。お伝えしてませんでしたよね。 ご指摘ありがとうございます!修正します。
m.ts10806

2020/01/14 13:07

いえ、 >至急! こういう煽り文句はむしろ回答者を遠ざけるだけと言う指摘ですよ。
ryousukesatou

2020/01/14 13:37

そうだったのですか?気をつけます。
guest

回答1

0

そのあなたの思うようなフォームを新規作成しましょう。

それからのおはなしとなります

投稿2020/01/14 13:01

y_waiwai

総合スコア87719

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

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

ryousukesatou

2020/01/14 13:08

そうですよね。そうなんですよね。ただ、ちょっと質問を編集します。
y_waiwai

2020/01/14 13:13

実装できるなら、そのあなたが考えタイミングのときにその、すでに実装しているフォームを表示すればいい、というだけのはなしになるんですが。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問