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

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

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

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

Q&A

1回答

1028閲覧

Rails リンクPathでのエラーをなおしたいです

aaachanzu

総合スコア6

Ruby on Rails 5

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

0グッド

1クリップ

投稿2018/02/02 03:23

お世話になります。

前提・実現したいこと

https://qiita.com/YuitoSato/items/94913d6a349a530b2ea2

上記サイトを参考にいいね機能を導入しようと考えています。
(上記のサイトでlikeとなっている部分をwillbuyに変更しています。)

view/items/index.html.erbから部分テンプレートとして_tr.html.erb、そしてまた部分テンプレートとして_willbuy.html.erbを呼び出しておりますが、下記エラーが出てしまいます。

なかなか解決に至らずこちらに質問させていただきました。
間違っている箇所をご指摘いただければと思います。
よろしくお願いいたします。

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

Ruby エラー内容 NameError at /items undefined local variable or method `willbuy' for #<#<Class:0x007f8047147de0>:0x007f8045ce7580> #willbuyモデル class Willbuy < ApplicationRecord belongs_to :item, counter_cache: :willbuy_count belongs_to :user end #itemモデル class Item < ApplicationRecord mount_uploader :item_image, ImageUploader validates :item_name, presence: true validates :item_image, presence: true belongs_to :user has_many :willbuys, dependent: :destroy # ユーザーがすでにwillbuyしているか確認するメソッド def willbuy_user(user_id) Willbuy.find_by(user_id: user_id) end end #/views/items/html.html.erb <div class="item-list"> <% @items.each do |item| %> <%= render 'tr', item: item %> <% end %> </div> #/views/items/_tr.html.erb <!-- ユーザーアイコンとユーザーネーム--> <div class="hello"> <% if !item.user.icon.present? %> <%= image_tag ("default.jpg") , class:"icon" %> <% else %> <%= image_tag item.user.icon.icon.url, class:"icon"%> <% end %> <span> <%= item.user.first_name %> </span> </div> <!-- アイテム名 と アイテムコスト--> <div> <%= item.item_name %> <% if item.item_cost.present? %> <span> <%= item.item_cost %>円 </span> <% end %> </div> <!-- アイテム画像 --> <div> <%= image_tag item.item_image.url, class:"item_image" %> </div> <!-- 編集と削除 --> <% if current_user == item.user %> <div> <%= link_to item_path(item.id), data: { confirm: "Are you sure?"}, method: :delete do %> <i class="fa fa-trash-o fa-2x" aria-hidden="true"></i> <% end %> <%= link_to edit_item_path(item.id), remote: true do %> <i class="fa fa-pencil fa-2x" aria-hidden="true"></i> <% end %> <% else %> <!-- WillbuyとDidbuy --> <%= render 'willbuys/willbuy', item: item %> <% end %> </div> #/views/willbuys/_willbuy.html.erb <% if logged_in? %> <% if item.willbuy_user(current_user.id) %> #以下の行でエラー発生 <%= button_to item_willbuy_path(willbuy, item_id: item.id), method: :delete, id: "willbuy-button", remote: true do %> <i class="far fa-hand-paper"></i> <% end %> <% else %> <%= button_to "Willbuy", item_willbuys_path(item), id: "willbuy-button", remote: true %> <% end %> <% end %>

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

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

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

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

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

guest

回答1

0

エラーメッセージは「willbuy というローカル変数もメソッドも知らないけど?」と言っています。
aaachanzu さんは,そういうローカル変数が使えるはずと思って書かれたのですよね。

ビューテンプレートでのローカル変数は,そのテンプレート内で定義(つまり代入)するか,部分テンプレートを render するときにオプションで渡してやらないと使えません。

/views/items/_tr.html.erb を見ると単に

rb

1render 'willbuys/willbuy', item: item

となっていますね。だから NameError になるのでしょう。

部分テンプレートへのローカル変数の渡し方の詳細は下記をご覧ください。

レイアウトとレンダリング # 3.4.4 ローカル変数を渡す | Rails ガイド

投稿2018/02/02 07:34

scivola

総合スコア2108

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問