前提・実現したいこと
for_forで保存済みの住所から住所を選択しパラメータにidを送りたい。
paramsがうまくいっていないのでorderの保存処理saveはまだ実装してません。
paramsが取得できていない理由を知りたいです。
必要な情報がありましたらコメントでお知らせいただけると嬉しいです、更新させていただきます。
schema.rbより関連モデルのカラム
create_table "addresses", force: :cascade do |t| t.integer "end_user_id", null: false t.string "postal_code", null: false t.string "address", null: false t.string "name", null: false t.datetime "created_at", null: false t.datetime "updated_at", null: false end create_table "end_users", force: :cascade do |t| t.string "email", default: "", null: false t.string "encrypted_password", default: "", null: false t.string "reset_password_token" t.datetime "reset_password_sent_at" t.datetime "remember_created_at" t.string "last_name" t.string "first_name" t.string "last_name_kana" t.string "first_name_kana" t.string "postal_code" t.string "address" t.string "telephone_number" t.boolean "is_active", default: true t.datetime "created_at", null: false t.datetime "updated_at", null: false t.index ["email"], name: "index_end_users_on_email", unique: true t.index ["reset_password_token"], name: "index_end_users_on_reset_password_token", unique: true end create_table "orders", force: :cascade do |t| t.integer "end_user_id", null: false t.string "postcode", null: false t.string "address", null: false t.string "delivery_name", null: false t.integer "postage", null: false t.integer "total_fee", null: false t.integer "payment", default: 0, null: false t.integer "orders_status", default: 0, null: false t.datetime "created_at", null: false t.datetime "updated_at", null: false end ``` **関連モデル** 今回関係しそうなモデルのリレーション: **end_user**と**order**と**address** ``````ここに言語を入力 class EndUser < ApplicationRecord # Include default devise modules. Others available are: # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable devise :database_authenticatable, :registerable, :recoverable, :rememberable, :validatable validates :last_name, :last_name_kana, :first_name, :first_name_kana, :postal_code, :address, :telephone_number, presence: true has_many :cart_items has_many :orders has_many :addresses def active_for_authentication? super && (self.is_active == true) end end ``` ``` class Order < ApplicationRecord belongs_to :end_user enum payment:{ cash: 0, credit: 1 } enum orders_status:{ waiting_for_payment: 0, confirmation_payment: 1, preparing_for_shipping: 2, sent: 3, arrival: 4 } attr_accessor :address_option end ``` ```ここに言語を入力 class Address < ApplicationRecord belongs_to :end_user end ``` **orderコントローラー** ```ここに言語を入力 class EndUsers::OrdersController < ApplicationController before_action :cart_item_exist? def new @order = Order.new end def confirm end def complete end def create (中略) binding.pry (中略) redirect_to items_path end def index end def show end private def cart_item_exist? if current_end_user.cart_items.empty? redirect_to end_users_cart_items_path, notice: 'カートが空です' end end def order_params # params[:order][:payment]=params[:order][:payment].to_i params.require(:order).permit(:end_user_id, :postcode, :address, :delivery_name, :payment, :address_option) end end ``` **views/orders/new.html.erb** フォームのビュー画面 ``` <%= form_for @order,url: end_users_orders_path do |f| %> <%= render 'layouts/error', model: f.object %> <%= f.hidden_field :end_user_id, :value => current_end_user.id %> <%= f.radio_button :payment, 0, checked: "checked" %> <%= f.label "現金" %> <%= f.radio_button :payment, 1 %> <%= f.label "クレジットカード" %> <br> <%= f.label :address, "お届け先" %> <br> <%= f.radio_button :address_option, 0, checked: "checked" %>ご自身の住所 <br> <%= current_end_user.address %> <br> <%= f.radio_button :address_option, 1 %> <%= f.label :address, '登録済み住所から選択' %><br> <%= f.select :address, current_end_user.addresses.map{|a| [a.address,a.id]}, {prompt: "選択してください"} %> <br> <%= f.radio_button :address_option, 2 %>新規住所 <br> <%= f.label :postcode,"郵便番号" %> <br> <%= f.text_field :postcode %> <br> <%= f.label :address, "住所"%> <br> <%= f.text_field :address %> <br> <%= f.label :delivery_name,"宛名" %><br> <%= f.text_field :delivery_name %> <br> <%= f.submit "確認画面へ進む",class:"btn btn-primary" %> <% end %> ``` ### 発生している問題・エラーメッセージ createアクション内でbinding.pryにより以下を試しました。 ![イメージ説明](7303c4bbe84ba6b1c0341e31b017ebe0.png) params[:order][:address]が空になってしまっている。 ![イメージ説明](c7df8e14baee4afb2924f13e5b5cb9cd.png) セレクトメソッド内の配列は適切に作られているように見えます。 string型のaddressにidをいれようとしてるからかと思い、 ```hoge.rb current_end_user.addresses.map{|a| [a.address,a.id.to_s]}, ``` としても状況変わらずでした。 また、rails sで立ち上げて問題のビューページで検証しました。 ![イメージ説明](3e74ba20d4b2a202905171ef7013d125.png) セレクトフォームのhtml翻訳後もうまく行ってそうな気がしてます。。 ### 補足情報(FW/ツールのバージョンなど) Rails 5.2.4.3 追記 ![イメージ説明](475cf76a86d9233fed87abcc2a1ef146.png)
回答1件
あなたの回答
tips
プレビュー