プログラミング初心者です。
アプリを1から作成しているのですが、完全に詰まってしまったので、ご教授いただけると幸いです。
実現したいこと
商品の登録ができるようにしたいです。
以下のテーブルを作成したところ、regular_priceやdiscounted_priceはproductsテーブルに定義されていないとエラーが出てしまいます。
調べても引っ張ってくる方法が分からず、、、どうしたら良いのでしょうか?
productsテーブル
user_id name
product_storesテーブル
product_id store_id regular_price discounted_price
storesテーブル
name
products_controller.rb
ruby
1 def new 2 @product = Product.new 3 end 4 5 def create 6 @product = current_user.products.build(product_params) 7 if @product.save 8 redirect_to products_path, success: t('defaults.message.register', item: Product.model_name.human) 9 else 10 flash.now[:alert] = t('defaults.message.not_register', item: Product.model_name.human) 11 render :new 12 end 13 end 14 15 private 16 17 def product_params 18 params.require(:product).permit(:product_name, :store_name, :regular_price, :discounted_price) 19 end
app/views/products/new.html.erb
ruby
1<% content_for(:title, t('.title')) %> 2<div class="container"> 3 <div class="row"> 4 <div class="col-md-10 offset-md-1 col-lg-8 offset-lg-2"> 5 <h1><%= t('.title') %></h1> 6 <%= form_with model: @product, local: true do |f| %> 7 <%= render 'layouts/error_messages', model: f.object %> 8 <div class="form-group"> 9 <%= f.label :product_name %> 10 <%= f.text_field :product_name, class: 'form-control' %> 11 </div> 12 <div class="form-group"> 13 <%= f.label :store_name %> 14 <%= f.text_field :store_name, class: 'form-control' %> 15 </div> 16 <div class="form-group"> 17 <%= f.label :regular_price %> 18 <%= f.text_field :regular_price, class: 'form-control' %> 19 </div> 20 <div class="form-group"> 21 <%= f.label :discounted_price %> 22 <%= f.text_field :discounted_price, class: 'form-control' %> 23 </div> 24 <%= f.submit t('defaults.signup'), class: 'btn btn-primary' %> 25 <% end %> 26 </div> 27 </div> 28</div>
regular_priceやdiscounted_priceは、なぜproduct_storesにもたせているのでしょうか?
元々は別でテーブルを作ろうとしていたのですが、店ごとの通常価格・特別価格を保存出来るようにしたかったので、product_storesのカラムとしてregular_priceやdiscounted_priceをもたせています。
現在の商品登録画面の view を質問文に追加して欲しいです。
追加しました。
追加ありがとうございます。
この画面に店舗名(store_name)のテキストフィールドがあるのは何故でしょうか?
「店舗一覧からセレクトボックスなどで選ぶ」みたいな UI を想像してたんですが、そうでないということは、この画面から商品(Product)と店舗(Store)を同時に登録するような機能を作ろうとされているのでしょうか?
おっしゃる通り、一つの画面で商品名・店舗名・価格を入力し、登録できる形にしたいです。
> 商品名・店舗名・価格を入力し、登録できる形
で本当に間違いないですか?
「登録済みの店舗をセレクトボックスで選ぶ」とか
「全店舗を each で表示する」とかじゃなくて、
ここで商品名・店舗名を両方入力するんですか?
例えば、最終的に以下のようなデータを作りたいと仮定します。
------------------------------------------
JR東京駅店
* みかん(通常50円 / 特別40円)
* りんご(通常120円 / 特別100円)
神田小川町店
* みかん(通常55円 / 特別45円)
------------------------------------------
この場合、ユーザーはどのように画面操作するのでしょうか?
--
最初は画面上で以下のような入力を行うと思います。
------------------------------------------
商品名 [ みかん ]
店舗名 [ JR東京駅店 ]
通常価格 [ 50 ] 円
特別価格 [ 40 ] 円
------------------------------------------
ここまでは良いです。
でも、次に「JR東京駅店」に新たに「りんご」を追加したい場合はどうするのでしょう?
ユーザーはもう一度正確に店舗名を入力しなければならないのでしょうか?
もしうっかり店舗名を間違えたら、別の店舗として DB に登録されるのでしょうか?
------------------------------------------
商品名 [ りんご ]
店舗名 [ JR東京駅店 ] ← もう一度店舗名を入力させる?
通常価格 [ 120 ] 円
特別価格 [ 100 ] 円
------------------------------------------
「みかん」を別の店舗でも取り扱う場合はどうするのでしょう?
こちらも、商品名を一字一句間違えずに入力しなければならないのでしょうか?
------------------------------------------
商品名 [ みかん ] ← もう一度商品名を入力させる?
店舗名 [ 神田小川町店 ]
通常価格 [ 55 ] 円
特別価格 [ 45 ] 円
------------------------------------------
確かにもう一度正確に店舗名を入力するのは手間ですね。
そこまで考えが及びませんでした。
登録済みの店舗名はセレクトボックスで選べるようにしたいです。
店舗や価格追加については以下のように考えています。
------------------------------------------------------------------------------
商品名 [ みかん ]
店舗名 [ 神田小川町店 ]
通常価格 [ 55 ] 円
特別価格 [ 45 ] 円
店舗名 [ JR東京駅店 ] ←このように追加できる
通常価格 [ 65 ] 円
特別価格 [ 60 ] 円
------------------------------------------------------------------------------
その時に店舗と価格は紐付いているようにしたいのですが、これは可能なのでしょうか?
例えば、詳細画面を表示した際に下記のように表示させたいです。
------------------------------------------------------------------------------
みかん
店舗名 特別価格 通常価格
[ 神田小川町店 ] [ 45 ] 円 [ 55 ] 円
[ JR東京駅店 ] [ 65 ] 円 [ 60 ] 円
------------------------------------------------------------------------------
前置きが長くなっちゃってすみません。
入力画面と詳細画面のイメージについて了解しました。
その仕様なら使いやすそうですね。
> その時に店舗と価格は紐付いているようにしたいのですが、これは可能なのでしょうか?
> 例えば、詳細画面を表示した際に下記のように表示させたいです。
もちろん実現可能です。
Rails ガイドの「10 複雑なフォームを作成する」に従って作れば、実装はそんなに難しくないと思います。
https://railsguides.jp/form_helpers.html
また、動的に入力項目を増やしたいなら gem cocoon が便利です。
https://github.com/nathanvda/cocoon
回答を書こうと思うんですが、解説を含めると結構長くなるので、しばらくお時間をいただくと思います。
ありがとうございます。
ご回答お待ちしております。
回答が遅くなって申し訳ないです。
さきほど投稿したのでご確認ください。
とても分かりやすく、且つ理想としていた事が出来るようになりました。
本当にありがとうございます。
回答1件
あなたの回答
tips
プレビュー