前提・実現したいこと
Railsで 「お客様の商品次回購入時期を表示する」 システムを作っています。
・Userテーブル:購入者情報登録済み
→カラム:id, number, name
・Productテーブル:商品情報登録済み
→カラム:id, number, brand, name, term
・Purchaseテーブル:フォームより入力
→カラム:user_number, product_number
中間テーブル(Purchase)を作成し、登録済みのuser_numberとproduct_numberを
form入力をして紐づくデータをUserテーブル,Productテーブルから取得
という機能を実装中に以下のエラーメッセージが発生しました。
発生している問題・エラーメッセージ
NoMethodError in Purchases#index Showing /home/ec2-user/environment/RepeatAlart_app/app/views/purchases/index.html.erb where line #18 raised: undefined method `name' for 1:Integer Extracted source (around line #18):
該当のソースコード
16 <tr> 17 <td><%= purchase.user_number %></td> 18 <td><%= purchase.user_number.name %></td> 19 <td><%= purchase.product_number.brand %></td> 20 <td><%= purchase.product_number.name %></td> 21 <td><%= purchase.created_at %></td>
試したこと
補足情報(FW/ツールのバージョンなど)
model
1class User < ApplicationRecord 2validates :name, presence: true, length: { maximum: 50 } 3validates :number, presence: true 4has_many :purchases 5has_many :products, through: :purchases 6belongs_to :salon 7end
model
1class Product < ApplicationRecord 2validates :brand, presence: true 3validates :number, presence: true 4validates :name, presence: true 5validates :term, presence: true 6validates :name, uniqueness: true 7has_many :purchases 8has_many :users, through: :purchases 9belongs_to :salon 10end
model
1class Purchase < ApplicationRecord 2 belongs_to :user, optional: true 3 belongs_to :product, optional: true 4 belongs_to :salon 5end
controller
1class PurchasesController < ApplicationController 2 def index 3 @purchases = Purchase.where(salon_id: current_salon.id) 4 @purchase = Purchase.new 5 end 6 7 def create 8 @purchase= Purchase.new(purchase_params.merge(salon_id: current_salon.id)) 9 if @purchase.save 10 flash[:success] = "Success!" 11 redirect_to "/purchases" 12 else 13 redirect_to "/purchases" 14 end 15 end 16 17 def edit 18 @purchase=Purchase.find(params[:id]) 19 end 20 21 def update 22 purchase=Purchase.find(params[:id]) 23 purchase.update(purchase_params) 24 redirect_to "/purchases" 25 end 26 27 def destroy 28 Purchase.find(params[:id]).destroy 29 flash[:success]= "deleted" 30 redirect_to "/purchases" 31 end 32 33 private 34 35 def purchase_params 36 params.require(:purchase).permit(:user_number, :product_number) 37 end 38end
view
1<h1>購入商品一覧</h1> 2 <table class="table"> 3 <thead> 4 <tr> 5 <th>お客様No.</th> 6 <th>お客様名</th> 7 <th>ブランド</th> 8 <th>商品名</th> 9 <th>購入日</th> 10 <th>次回購入推奨日</th> 11 <th colspan="2"></th> 12 </tr> 13 </thead> 14 <tbody> 15 <% @purchases.each do |purchase| %> 16 <tr> 17 <td><%= purchase.user_number %></td> 18 <td><%= purchase.user_number.name %></td> 19 <td><%= purchase.product_number.brand %></td> 20 <td><%= purchase.product_number.name %></td> 21 <td><%= purchase.created_at %></td> 22 <td><%= purchase.limit_date %></td> 23 <td><%= link_to "編集", "#", class:"btn btn-primary mr-3" %></td> 24 <td><%= link_to "削除", purchase, method: :delete, class:"btn btn-primary mr-3" %></td> 25 <% end %> 26 <tr> 27 </tbody> 28 </table> 29 30<h1>購入情報登録</h1> 31 32<div class="row"> 33 <div class="col-md-6 col-md-offset-3"> 34 <%= form_for(@purchase) do |f| %> 35 <%= f.label :user_number %> 36 <%= f.number_field :user_number, class: 'form-control' %> 37 <%= f.label :product_number %> 38 <%= f.number_field :product_number, class: 'form-control' %> 39 40 <%= f.submit "購入情報登録", class: "btn btn-primary" %> 41 <% end %> 42 </div> 43</div>
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/04/17 03:38