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

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

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

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

Ruby

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Q&A

解決済

1回答

1394閲覧

ruby on rails データがDBに保存されない??

tomato185

総合スコア29

Ruby on Rails 5

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

Ruby

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

0グッド

0クリップ

投稿2020/09/11 03:40

編集2020/09/11 13:44

### 実現したいこと
ruby on rails 初心者です。
現在、ECサイトの構築をしており、「カート」情報を一度セッションにいれ、確認画面(views/orders/index.html)の注文確定ボタンを押下すると、ordersテーブルとaddressesテーブルにデータが保存される仕組みを作成しております。

### エラー文
エラー文はでてきておりませんが、(views/orders/index.html.erb)で送信されたデータがaddressesテーブルには保存されておりますが、
ordersテーブルには保存されておりません。
1つでも入っていれば、@cart_items.each do |cart_item|の部分がおかしいと断定できますが、1つも入っていないことを
考えると、他に原因があると考えられます。

みなさんのお力添えをいただけないでしょうか。

###コード

(views/orders/index.html.erb) ※該当部分 <%= form_for(@order, url: orders_path) do |f|%> <%= f.hidden_field :user_id, value: current_user.id %> <%= f.hidden_field :last_name, value: session[:last_name] %> <%= f.hidden_field :first_name, value: session[:first_name] %> <%= f.hidden_field :furi_last_name, value: session[:furi_last_name] %> <%= f.hidden_field :furi_first_name, value: session[:furi_first_name] %> <%= f.hidden_field :postal_code, value: session[:postal_code] %> <%= f.hidden_field :prefecture, value: session[:prefecture] %> <%= f.hidden_field :address, value: session[:address] %> <%= f.hidden_field :store, value: session[:store] %> <%= f.hidden_field :how_to_pay, value: session[:how_to_pay] %> <%= f.fields_for :orders do |o|%> <% @cart_items.each do |cart_item|%> <% product = Product.find_by(id: cart_item.product_id) %> <%= o.hidden_field :product_id, value: product.id %> <%= o.hidden_field :quantity, value: cart_item.quantity %> <% end%> <% end %>   <p><%= f.submit "注文確定", class: 'btn' %></p> <% end %>
(controllers/addresses_controller.rb) (views/addresses/index.html.erbで入力されたデータをcreateアクションでsessionに項目別に保存し、 orders_path「views/orders/index.html.erb」に遷移する) class AddressesController < ApplicationController def index cart = Cart.find_by(user_id: current_user.id) @cart_items = CartItem.where(cart_id: cart.id) @product= Product.find_by(id: current_user.id) @addresses = Address.new end def create session[:store] = params[:session][:store] session[:last_name] = params[:session][:last_name] session[:first_name] = params[:session][:first_name] session[:furi_last_name] = params[:session][:furi_last_name] session[:furi_first_name] = params[:session][:furi_first_name] session[:postal_code] = params[:session][:postal_code] session[:prefecture] = params[:session][:prefecture] session[:address] = params[:session][:address] session[:how_to_pay] = params[:session][:how_to_pay] redirect_to orders_path end end
(controllers/orders_controlles.rb) class OrdersController < ApplicationController def index cart = Cart.find_by(user_id: current_user.id) @cart_items = CartItem.where(cart_id: cart.id) @product= Product.find_by(id: current_user.id) @address = Address.new @address.orders.build end def create @address = Address.new(address_params) if @address.save flash[:success] = "購入が完了しました。" redirect_to root_path else render "index" end end private def address_params params.require(:address).permit(:user_id, :last_name, :first_name, :furi_last_name, :furi_first_name, :postal_code, :prefecture, :address, :store, :how_to_pay, address_attributes: [ :product_id, :quantity ]) end end

###補足情報(FW/ツールのバージョンなど)
ruby 2.6.6
rails '~> 5.2.4', '>= 5.2.4.3'

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

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

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

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

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

guest

回答1

0

自己解決

def address_params params.require(:address).permit(:user_id, :last_name, :first_name, :furi_last_name, :furi_first_name, :postal_code, :prefecture, :address, :store, :how_to_pay, address_attributes: [ :product_id, :quantity ]) end

address_attributes:の部分が違いました。
orders_attributes: に直したら直りました。

投稿2020/09/11 23:43

tomato185

総合スコア29

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問