ecサイト作成しているのですが改善できない箇所があるので質問させていただきます。
application.html.erbにカテゴリー一覧をeachで記述をして、そこからカテゴリーの詳細(categories/:id)に行きたいのですがエラーなどが出てうまくいかなくて困っています。
まづ実際のコードを簡略ですが載せます。
application.html.erb
<div class="left_category border1"> <ul> <% @categories.each do |category| %> <li><%= link_to category.c_name, category %></li> <% end %> </ul> </div> <div> <%= yield %> </div>
categories/show.html.erb
<div><h1>【<%= @category.c_name %>】一覧</h1></div> <div>商品数:<%= @categories.count %> コ</div> <div> <% @categories.each do |category| %> <table> <tbody> <tr> <td> <div><%= category.title %></div> <div><%= category.price %></div> </td> </tr> </tbody> </table> <% end %> </div>
category.rb
class Category < ApplicationRecord has_many :products end
product.rb
class Product < ApplicationRecord belongs_to :category end
categories_controller.rb
class CategoriesController < ApplicationController def index @categories = Category.all end def show @category = Category.find_by(id: params[:id]) @cart = current_cart @categories = @category.products.paginate(page: params[:page], per_page: 12) end private def category_params params.require(:category).permit(:product_id, :product, :c_name) end end
products_controller.rb
class ProductsController < ApplicationController def index @products = Product.all if params[:title].present? @products = @products.get_by_name params[:title] end end def show @product = Product.find_by(id: params[:id]) @cart = current_cart end private def set_product @product = Product.find(params[:id]) end def product_params params.require(:product).permit(:title, :description, :image_url, :price, :category_id, :c_name) end end
store_controller.rb
class StoreController < ApplicationController def index @cart = current_cart @categories = Category.all @products = Product.paginate(:page => params[:page], :per_page => 12) if params[:title].present? @products = @products.get_by_name params[:title] end end end
schema.rb
ActiveRecord::Schema.define(version: 20180417103344) do create_table "categories", force: :cascade do |t| t.string "c_name" t.datetime "created_at", null: false t.datetime "updated_at", null: false end create_table "products", force: :cascade do |t| t.string "title" t.text "description" t.string "image_url" t.decimal "price", precision: 8, scale: 2 t.datetime "created_at", null: false t.datetime "updated_at", null: false t.string "category_id" end end
こんなところでしょうか。
ルートページがstore/indexに当たります。
ここでカテゴリーの名前のリンクから詳細ページに行こうとすると、エラーが出ます、以下エラー内容です
NoMethodError in Categories#show Showing /vagrant/depot-study/app/views/layouts/application.html.erb where line #59 raised: undefined method `c_name' for #<Product:0x0b69b9f4>
ターミナルではこのように出ています
ActionView::Template::Error (undefined method `c_name' for #<Product:0x0b69b9f4>):
試しにapplication.htmlのeachないのリンクのところを<%= link_to ”適当な名前”,category%>でやるとリンク先には行けました。ただカテゴリー一覧が全て同じ名前になります。
現在は仕方なく、eachを使わないで一つづつリンク先と名前を指定してありますが、できたらeach使いたいと思っています
以上なのですが、全く改善方法がわからないのでもしお分かりになるかたいましたらご教授願いいたします。m(._.)m
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/04/30 11:47