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

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

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

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

SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

Ruby on Rails

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

1612閲覧

Rails 中間テーブルへの保存と他テーブルからのデータ取得

Ryota.Niwa

総合スコア5

Ruby

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

SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

Ruby on Rails

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2020/04/16 08:37

前提・実現したいこと

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>

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

ベストアンサー

18  <td><%= purchase.user_number.name %></td> 19  <td><%= purchase.product_number.brand %></td> 20  <td><%= purchase.product_number.name %></td>

18  <td><%= purchase.user.name %></td> 19  <td><%= purchase.product.brand %></td> 20  <td><%= purchase.product.name %></td>
です。
ただしこのままではうまく行きません。関連付けを user.id,product.idでやっていないので、Modelの方も手直しが必要
belongs_to :user, optional: true has_many :purchases

belongs_to :user, optional: true, foreign_key: :user_number has_many :purchases, foreign_key: user_number
に。productも同じく

投稿2020/04/16 21:30

winterboum

総合スコア23329

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

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

Ryota.Niwa

2020/04/17 03:38

ご回答ありがとうございました! 非常に助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問