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

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

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

MVCモデルの一部であるModelはアプリケーションで扱うデータとその動作を管理するために扱います。

Ruby on Rails

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

データベース設計

データベース設計はデータベースの論理的や物理的な部分を特定する工程です。

検索

検索は、あるデータの集まりの中から 目的のデータを見つけ出すことです。

Q&A

1回答

917閲覧

railsアプリ作成中 中間テーブルの表示データに制限をかけたい

Ryota.Niwa

総合スコア5

Model

MVCモデルの一部であるModelはアプリケーションで扱うデータとその動作を管理するために扱います。

Ruby on Rails

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

データベース設計

データベース設計はデータベースの論理的や物理的な部分を特定する工程です。

検索

検索は、あるデータの集まりの中から 目的のデータを見つけ出すことです。

0グッド

0クリップ

投稿2020/04/27 13:03

編集2022/01/12 10:55

Railsで 「お客様の商品次回購入時期を表示する」 システムを作っています。

・Salonテーブル:ログインユーザー
→カラム:id, name, email

・Userテーブル:購入者情報登録済み
→カラム:id, number, name, email, salon_id

・Productテーブル:商品情報登録済み
→カラム:id, number, brand, name, term, salon_id

・Purchaseテーブル:フォームより入力
→カラム:id, user_number, product_number, salon_id

中間テーブル(Purchase)を作成し、登録済みのuser_numberとproduct_numberを
form入力をして紐づくデータをUserテーブル,Productテーブルから取得して一覧表示という機能を実装しました。

userとproductそれぞれでの一覧表示においてはログインユーザーの登録データのみを表示出来ておりますが、
上述の中間テーブルであるpurchaseにおいては別のログインユーザーの保存したデータを表示される可能性があります。
ログインユーザーごとにそれぞれuser,productテーブルに任意のnumberが入力でき、DB上でnumberの重複を許容した上でどのような処理をすべきかご教授ください。
よろしくお願い致します。

【purchase html.erb】

<div class="purchase_index"> <h1>購入商品一覧</h1> <table class="table"> <thead> <tr>   <th>お客様No.</th>   <th>お客様名</th>   <th>ブランド</th>   <th>商品名</th>   <th>購入日</th>   <th>残り日数</th> <th colspan="2"></th> </tr> </thead> <tbody> <% @purchases.each do |purchase| %> <tr> <td><%= purchase.user_number %></td> <td><%= purchase.user.name %></td> <td><%= purchase.product.brand %></td> <td><%= purchase.product.name %></td> <td><%= purchase.created_at.strftime('%Y/%m/%d') %></td> <td><%= purchase.product.term - (Date.today - purchase.created_at.to_date).to_i %></td>  <td><%= purchase.user.email %></td> <td><%= link_to "削除", purchase, method: :delete, class:"btn btn-primary mr-3" %></td> <% end %> <tr> </tbody> </table> </div> <div class="purchase_form"> <h2>購入情報登録</h2> <%= form_for(@purchase) do |f| %> <%= f.label :user_number %> <%= f.number_field :user_number, class: 'form-control' %> <%= f.label :product_number %> <%= f.number_field :product_number, class: 'form-control' %> <%= f.submit "購入情報登録", class: "btn btn-primary" %> <% end %> </div> </div>

【purchase controller】

class PurchasesController < ApplicationController def index @purchases = Purchase.where(salon_id: current_salon.id) @purchase = Purchase.new end def create @purchase= Purchase.new(purchase_params.merge(salon_id: current_salon.id)) if @purchase.save flash[:success] = "Success!" redirect_to "/purchases" else redirect_to "/purchases" end end def edit @purchase=Purchase.find(params[:id]) end def update purchase=Purchase.find(params[:id]) purchase.update(purchase_params) redirect_to "/purchases" end def destroy Purchase.find(params[:id]).destroy flash[:success]= "deleted" redirect_to "/purchases" end private def purchase_params params.require(:purchase).permit(:user_number, :product_number) end end

【purchase model】

class Purchase < ApplicationRecord belongs_to :user, optional: true, foreign_key: :user_number belongs_to :product, optional: true, foreign_key: :product_number belongs_to :salon end

【user model】

class User < ApplicationRecord validates :name, presence: true, length: { maximum: 50 } validates :number, presence: true has_many :purchases, foreign_key: :user_number has_many :products, through: :purchases belongs_to :salon end

【product model】

class Product < ApplicationRecord validates :brand, presence: true validates :number, presence: true validates :name, presence: true validates :term, presence: true has_many :purchases, foreign_key: :product_number has_many :users, through: :purchases belongs_to :salon end

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

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

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

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

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

guest

回答1

0

質問も回答も全く無いのは、問題の理解できないから、です、

1)purchaseにおいては別のログインユーザーの保存したデータを表示される可能性があります。
2)ログインユーザーごとにそれぞれuser,productテーブルに任意のnumberが入力でき、
3)DB上でnumberの重複を許容

1)はどういう場面でそうなる可能性があると考えているのでしょう。
どのcontrollerのどのactionで、という表現だとわかりやすいです
2)任意のnunber というのは
Aさんnnumberに007 Bさんのnumbber も007 を設定できる、という意味ですか?
3) DB上でnumberの重複を許容 というのは、どのtableでのnumberですか?

投稿2020/05/06 08:18

winterboum

総合スコア23284

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問