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

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

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

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

Ruby

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

解決済

acts-as-taggable-onでタグ付けした際のエラー

KayoFujii
KayoFujii

総合スコア0

Ruby on Rails 5

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

Ruby

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

1回答

0評価

0クリップ

779閲覧

投稿2019/06/26 13:12

前提・実現したいこと

railsでツイート投稿アプリを作っています。
ツイートをタグづけしたいと思い、acts-as-taggable-onと言うgemを
使い、タグづけを試みたのですが、エラーが出ました。
助言をいただけると幸いです。

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

NameError

Showing /Users/fujiikayo/Desktop/sharefarm/app/views/tweets/index.html.erb where line #93 raised: undefined local variable or method `tweet' for #<#<Class:0x007fca3c9d67b0>:0x007fca438b0a00> Did you mean? @tweets Extracted source (around line #93): <tr> <th>タグ</th> <td><%= render 'tweets/tag_list', tag_list: tweet.tag_list %></td> </tr> </thead> </table> Rails.root: /Users/fujiikayo/Desktop/sharefarm

該当のソースコード

tweets/index.html.erb

ruby

<body> <div class="container text-center"> <div class="row my-4"> <div class="col-sm-1"> </div> <div class="card cont col-sm-10 p-2"> <strong>果物を検索する</strong> <%= form_tag(controller:"tweets",action:"index") do %> <%= text_field_tag :search %> <%= submit_tag '検索',:title => nil,:address => nil, class:"btn-gradient-radius" %> <% end %> </div> <div class="col-sm-1"> </div> </div> <div class="row"> <% @tweets.each do |t| %> <div class="col-sm-4 card cont"> <div> <div class="card cont m-1"> <strong><%= link_to t.name, tweet_path(t.id), class: "link_option" %><%= t.weight %><%= t.money %></strong><br> #省略 <table class="table table-bordered my-2"> <thead> <tr> <th>ユーザー名</th> <td> <%= image_tag t.user.image.to_s,width:50,height:50,class: "tweet_image rounded" %><br> <%= link_to t.user.name, user_path(t.user.id), class: "link_option" %> </td> </tr> <tr> <th>生産地</th> <td><%= t.address %></td> </tr> <tr> <th>投稿日</th> <td> <%= t.created_at %></td> </tr> <tr> <th>いいね数</th> <td><%= t.liked_users.count %></td> </tr> <tr> <th>タグ</th> <td><%= render 'tweets/tag_list', tag_list: tweet.tag_list %></td> </tr> </thead> </table> <%= link_to "詳細へ", tweet_path(t.id), class:"link_option" %> <% if t.user_id == current_user.id %> <%= link_to "編集する", edit_tweet_path(t.id), class:"link_option" %> <%= link_to "削除する", tweet_path(t.id), method: :delete, class:"link_option" %> <% end %> </div> </div> <% end %> </div> </div> </body>

tweets/new.html.erb

ruby

<body> <div class="container"> <%= form_for(@tweet, :url => { controller:'tweets', action:'create'},class:"form-horizontal")do |f| %> <div class="form-group"> <div class="form-group"> <%= f.label :画像 %> <%= f.fields_for :tweet_images do |i| %> <%= i.file_field :image, class:"form-control-file" %> <% end %> <span id="help8" class="form-text text-muted"> 販売したい実際の果物のサブ写真を撮影し、選択してください </span> </div> <div class="form-group"> <%= f.label :name, '農作物の名前' %> <%= f.text_field :name, class: "form-control", :placeholder => "ル・レクチェ 4kg 1900円"%> <span id="help8" class="form-text text-muted"> 農作物の名前を入力してください </span> </div> <div class="form-group"> <%= f.label :money, '農作物の価格' %> <%= f.text_field :money, class: "form-control", :placeholder => "ル・レクチェ 4kg 1900円"%> <span id="help8" class="form-text text-muted"> 農作物の希望買取価格を入力してください </span> </div> <div class="form-group"> <%= f.label :weight, '農作物の重さ' %> <%= f.text_field :weight, class: "form-control", :placeholder => "ル・レクチェ 4kg 1900円"%> <span id="help8" class="form-text text-muted"> 農作物の販売したい重さ(kg)を入力してください。 </span> </div> <div class="form-group"> <%= f.label :body, '果物の説明' %> <%= f.text_field :body,class:"form-control", :placeholder => "小玉のため、出荷できず、規格外品となっておりますが、味は正規品と変わらないです。コンポートなどのお菓子作りにいかがでしょうか。"%> <span id="help8" class="form-text text-muted"> 規格外品になってしまった理由などをお書きください </span> </div> <div class="field"> <%= f.label :address %> <%= f.text_field :address %> </div> <div class="form-group"> <%= f.label :tag_list %> <%= text_field_tag 'tweet[tag_list]', @tweet.tag_list.join(','), class: "form-control" %> </div> <div class="form-group"> <%= f.label :url, 'URL' %> <%= f.url_field :url, class:"form-control", :placeholder => "https..."%> <span id="help8" class="form-text text-muted"> その他URLなどあれば記載してください </span> </div> <div class="action"> <%= f.submit "送信", class: "btn-gradient-radius" %> </div> <% end %> <a class="link_option", href="/tweets/index">戻る</a> </div> </body>

tweets/_tag_list.html.erb

ruby

<%= tag_list.each do |tag| %> <span class="badge badge-primary mr-1 p-2"> <%= tag %> </span> <% end %>

tweet.rb

ruby

class Tweet < ApplicationRecord belongs_to :user has_many :comments, :dependent => :destroy has_many :reviews, :dependent => :destroy has_many :likes, :dependent => :destroy has_many :liked_users, through: :likes, source: :user has_many :tweet_images, :dependent => :destroy accepts_nested_attributes_for :tweet_images, allow_destroy: true geocoded_by :address after_validation :geocode acts_as_taggable acts_as_taggable_on :tag_list end

tweets.controller.rb

ruby

class TweetsController < ApplicationController before_action :authenticate_user!, except: [:index] #全ての投稿を表示する画面 def index # Orderで並び替え @tweets = Tweet.all.order("id DESC") if request.post? if params[:search] == nil @tweets = Tweet.all elsif params[:search] == "" @tweets = Tweet.all else #部分検索 @tweets = Tweet.where("address LIKE ? ",'%' + params[:search] + '%').or(Tweet.where("title LIKE ? ", "%" + params[:search] + "%")) end end #タグ絞り込み # if params[:tag_name] # @tweets = @tweets.tagged_with("#{params[:tag_name]}") # end end def new @tweet = Tweet.new 3.times{@tweet.tweet_images.build} # @tweet.tweets_categories.build end #新しいTweetの保存 def create @tweet = Tweet.new(tweet_params) #現在ログインしているUserのidをTweetのuser_idという部分にセット @tweet.user_id = current_user.id #新しいTweetの保存に成功した場合 if @tweet.save #index.html.erbにページが移る redirect_to action: "index" #新しいTweetsの保存に失敗した場合 else #もう一回投稿画面へ redirect_to action: "new" end end #投稿の詳細表示 def show @tweet = Tweet.find(params[:id]) @like = Like.new @comments = @tweet.comments @comment = Comment.new @reviews = @tweet.reviews @review = Review.new @tweet_images = @tweet.tweet_images @tweet_image = TweetImage.new end #投稿の編集 def edit @tweet = Tweet.find(params[:id]) end #投稿の削除 def destroy Tweet.find(params[:id]).destroy redirect_to action: :index end #アップデート def update @tweet = Tweet.find(params[:id]) if @tweet.update(tweet_params) redirect_to :action => "show", :id => @tweet.id else redirect_to :action => "new" end end private #セキュリティのため、許可した:bodyというデータだけ取ってくるようにする def tweet_params params.require(:tweet).permit(:body, :name, :money, :weight, :url, :address, :latitude, :longitude, :tag_list, tweet_images_attributes: [:image]) end end

試したこと

以下のサイトを参考にし、modelなどを変えてみました。
リンク
リンク

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Ruby on Rails 5

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

Ruby

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