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

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

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

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

Ruby on Rails

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

Q&A

解決済

1回答

1514閲覧

acts_as_taggable使用時のStrong Parametersについて

s.k.s

総合スコア9

Ruby

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

Ruby on Rails

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

0グッド

0クリップ

投稿2018/07/20 07:02

前提・実現したいこと

最近Ruby on Railsの勉強し始めたばかりのため、多々おかしいところがあるかもしれません・・・。
Ruby on Railsでツイッターのような機能を作っています。

そこでフォームで投稿時に記事にタグをつけたいのですが、データベースにもタグが付いて保存され機能自体は望んだように動いているのですが、パラメーターを見てみると疑問に思うことがあり、質問しました。

「acts_as_taggable」のgemを使用しています。

発生している問題・エラーメッセージ

ストロングパラメータを見てみると、 Unpermitted parameter: :tag_list となります。
なぜでしょうか?

ストロングパラメータに「tag_list」を入れるには、「tag_list:[]」をpermitの中に記載すればよいと思い込んでいたのですが、違いましたでしょうか?

どこを修正すればよいかアドバイスいただけますと幸いです。

上がストロングパラメータ(post_params)、下は通常?のパラメータ(params)内容 "-------" Unpermitted parameter: :tag_list <ActionController::Parameters {"contents"=>"コンテンツ", "user_id"=>1, "user_name"=>"名前"} permitted: true> "-------" <ActionController::Parameters {"utf8"=>"✓", "authenticity_token"=>"nwJRYbTRzqLYIwwZ2WAEIMG1H4/O3zwrAW/ttAqUUvYl31TvIMZQ+ss5k7lXm2RECWoSr4worLrbG3h6Cw7ofg==", "post"=><ActionController::Parameters {"contents"=>"コンテンツ", "tag_list"=>"タグタグ"} permitted: false>, "commit"=>"拡散", "controller"=>"texts", "action"=>"create"} permitted: false> "-------"
フォーム内容(Bootstrapを使っています) <%= form_for (@text) , url: new_text_path, as: :post do |f| %> <div class="panel panel-warning"> <div class="panel-heading"> <%= f.label :contents,"つぶやこう!!" %></div> <div class="panel-body"> <%= f.text_area :contents, value:"" %></br> <p>150字まで入力できます</p> </div> <div class="panel-body"> <%= f.label "タグ:" %> <%= text_field_tag 'post[tag_list]' %> <p>半角カンマ「,」で区切ると、2個までつけられます</p> <p>スペースは使えません</p> </div> <div class="panel-footer"> <%= f.submit "拡散", class: "btn btn-warning" ,remote: true %> </div> </div> <% end %>
ストロングパラメーター def post_params params.require(:post).permit(:contents, :contents_picture, tag_list:[] ).merge(user_id:current_user.id, user_name:current_user.name) end

モデルはSTIで実装しています。
タグはTags、投稿内容はPostsモデルに保存されます。

モデル class Post < ApplicationRecord has_many :texts accepts_nested_attributes_for :texts acts_as_taggable end class Text < Post belongs_to :post, optional: true end

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

Ruby2.5系
Rails5.2系

何か不足していることがあればお知らせください。
お手数お掛け致しますが、何卒よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

<%= text_field_tag 'post[tag_list]' %>
と書いているので、tag_listに入っているのが配列ではなく単体の文字列です。
なので、tag_list: []ではpermitできていません。

  1. StrongPramater側で :tag_list を許可する
  2. 送るFormで text_field_tag 'post[tag_list][]' にして配列にする

のどちらかで解決する気がします。

投稿2018/07/22 12:51

takumiabe

総合スコア661

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

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

s.k.s

2018/07/24 01:11

ありがとうございます。 StrongPramaterをご指摘いただきましたように修正した結果うまくいきました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問