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

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

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

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

Q&A

1回答

929閲覧

rails NoMethodErrorについて

asdfghjkl123

総合スコア1

Ruby on Rails

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

0グッド

0クリップ

投稿2021/05/15 12:54

イメージ説明
railでフリマサイトを作成しています。商品投稿一覧の実装中です。
エラーが解決できません。よろしくおねがいいたします。


products_controller.rb

class ProductsController < ApplicationController

def new
@product = Product.new
end

def create
@product = Product.new(product_params)
@product.status = 0

if params[:product][:image1] upload_file1 = params[:product][:image1] upload_file_name1 = upload_file1.original_filename output_dir = Rails.root.join('public', 'images') output_path = output_dir + upload_file_name1 File.open(output_path, 'w+b') do |f| f.write(upload_file1.read) end @product.image1 = upload_file_name1 end if params[:product][:image2] upload_file2 = params[:product][:image2] upload_file_name2 = upload_file2.original_filename output_dir = Rails.root.join('public', 'images') output_path = output_dir + upload_file_name2 File.open(output_path, 'w+b') do |f| f.write(upload_file2.read) end @product.image2 = upload_file_name2 end if params[:product][:image3] upload_file3 = params[:product][:image3] upload_file_name3 = upload_file3.original_filename output_dir = Rails.root.join('public', 'images') output_path = output_dir + upload_file_name3 File.open(output_path, 'w+b') do |f| f.write(upload_file3.read) end @product.image3 = upload_file_name3 end if @product.save flash[:success] = "出品しました。" redirect_to profiles_path and return else flash[:danger] = "出品に失敗しました。" redirect_to products_new_path end

end

def show
render "users/products"
@product = Product.find_by(id:params[:id])
end

def index
@product = Product.find(params[:id])
@product = Product.all.order(created_at: :asc)

@product = Product.select("image1") @product = Product.select("goods_name") @product = Product.select("goods_price")

end

private
def product_params
params.require(:product).permit(
:goods_name,
:goods_ex,
:goods_select,
:goods_price,
:image1,
:image2,
:image3
)
end
end

products.html.erb

<div class="main"> <div class="main2"> <div class="product"> <%= image_tag "pen.png", width: "150px" %> <div class="p_deta">
<% @product.each do |p| %> <%= p.goods_name %> <!--<p class="goods_name">ペン</p>--> <p class="value">$20</p> <% end %> </div> </div>
</div> </div> <%= render partial: 'users/mypage' %>

product.rb

class Product < ApplicationRecord
belongs_to :category, dependent: :destroy
belongs_to :user

validates :goods_name, presence: true
validates :goods_ex, presence: true
validates :goods_price, presence: true
validates :goods_select, presence: true

end


routes.rb

Rails.application.routes.draw do

get '/users/products/new', to:'users#products_new', as: :products_new
post '/users/products/new', to: 'users#products_new'

get '/users/products/' => 'products#show'
post 'users/products/new' => 'products#creat'

get '/users/products', to:'users#products', as: :products

get '/users/products', to:'products#index'

get '/users/products/(:id)', to:'users#item', as: :item

get '/users/products/(:id)/edit', to:'users#edit', as: :edit

end

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

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

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

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

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

guest

回答1

0

ruby

1def show 2render "users/products" 3@product = Product.find_by(id:params[:id]) 4end

@product に代入する前に render してますので nil になってますね。以下のように行を入れ替えたら動くでしょう。

ruby

1def show 2@product = Product.find_by(id:params[:id]) 3render "users/products" 4end

他に気になったこととしては、

  • find_by は単一レコードを返しますので each する必要はありません。
  • 必要があってビューのファイル名をカスタマイズしてるなら仕方ありませんが、products/show.html.erb としておけばわざわざ render する必要はありません。
  • post 'users/products/new' => 'products#creat' は最後の e が抜けてますね。

投稿2021/05/15 22:04

saoyagi2

総合スコア210

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

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

asdfghjkl123

2021/05/21 04:20

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問