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

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

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

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

Ruby on Rails

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

Q&A

解決済

2回答

3202閲覧

Rails タグ機能 上手く登録できません...

amedama

総合スコア37

Ruby

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

Ruby on Rails

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

0グッド

3クリップ

投稿2019/08/27 07:38

こんにちは!現在、Railsでタグ機能を実装しようとしています。

テーブルの関係はToxi法で、Tag_mapを通して、ArticleとTagを関連づけています。
参考までに関係を記載します。

ArticleModel

class Article < ApplicationRecord has_many :tag_maps, dependent: :destroy has_many :tags, through: :tag_maps def save_tags(tags) current_tags = self.tags.pluck(:name) unless self.tags.nil? old_tags = current_tags - tags new_tags = tags - current_tags old_tags.each do |old_name| self.tags.delete Tag.find_by(name: old_name) end new_tags.each do |new_name| article_tag = Tag.find_or_create_by(name: new_name) self.tags << article_tag end end end

Tag_mapModel

class Tag < ApplicationRecord has_many :tag_maps, dependent: :destroy has_many :articles, through: :tag_maps end

TagModel

class TagMap < ApplicationRecord belongs_to :article belongs_to :tag end

フォームから、タグの情報を:tag_listに乗せて,article_contorllerのcreateアクションに渡そうとしていますが....

_form.html.erb

<%= form_with model: article, local: true do |f| %> --省略-- <div class="form-group"> <%= f.label 'タグ' %> <%= f.text_field :tag_list %> </div> <%= f.submit %>

articles_controller.rb

def create @article = current_user.articles.build(article_params) tag_list = params[:tag_list].split(",") if @article.save @article.save_tags(tag_list) redirect_to @article, notice: "作成完了しました" else render :new, alert: "作成できませんでした" end end  

フォームから登録をすると、

undefined method `split' for nil:NilClass

と出ました。
これはparams[:tag_list]がnilになっているからだと思うのですが、どう記述すれば上手く登録できるのかわからず、行き詰ってしまいました。

問題箇所と解決策がわかる方、ご教授よろしくお願いします。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2019/08/27 08:44

params[:article][:tag_list]とすると値が取れないですか?
amedama

2019/08/27 09:13

dyoshikawaさんありがとうございます。取得できました! 質問した問題は解決しましたが、 記事の一覧でタグの名前を表示させようとすると登録したタグ名ではなく、全て Tag と表示されてしまいます。 もし原因がわかりそうなら加えて教えていただけるとありがたいです。 よろしくお願いします。 <% @articles.each do |article| %> <p><%= article.tags.name %></p> <% end %>
guest

回答2

0

ベストアンサー

記事の一覧でタグの名前を表示させようとすると登録したタグ名ではなく、全て Tag と表示されてしまいます。

tagsも複数なのでeachしないといけないんじゃないでしょうか。

erb

1<% @articles.each do |article| %> 2 <% article.tags.each do |tag| %> 3 <%= tag.name %> 4 <% end %> 5<% end %>

投稿2019/08/27 09:18

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

amedama

2019/08/27 09:30

dyoshikawaさん! ありがとうございます!!!!!!!!!!!!! 上手くいきました!!!!!!!!!!!! 自分で勝手に複雑に考えてしまっていました.... 丁寧に教えていただきありがとうございます。 dyoshikawaさんのおかげで、元気も回復しました! 頑張ります!
退会済みユーザー

退会済みユーザー

2019/08/27 09:31

はい、頑張って下さい。
guest

0

登録のときだとすると下記でいかがでしょうか?
tag_list = params[:tag_list].split(",") if params[:tag_list].present?

投稿2019/08/27 09:05

no1knows

総合スコア3365

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

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

amedama

2019/08/27 09:23

no1knowsさんありがとうございます。 no1knowsさんのコードだと上手く行きませんでしたが、 dyoshikawaさんにご指摘いただいた[:article]をつければ登録できました。 no1knowsさんに教えていただいたコードもより丁寧で新しい発見になり、参考になりました! ありがとうございます。 新たな問題が発生したのですが、もしお時間あればご教授願えませんでしょうか? 登録したタグ名を記事一覧などで表示しようとした際、実際にはテストとしてRailsと登録したのですが、なぜかすべてTagという名前で表示されてしまいます。 コンソールで、 もし原因がわかればよろしくお願いします。 <% @articles.each do |article| %> <p><%= article.tags.name %></p> <% end %>
amedama

2019/08/27 09:30

解決しましたありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問