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

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

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

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

Ruby on Rails

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

データベース

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

バリデーション

Validationとは特定の入力データが、求められた条件に当てまっているかをチェックするために使われます。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

Q&A

解決済

1回答

870閲覧

DBへ入力した情報が登録されない ruby on rails

tomato185

総合スコア29

Ruby

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

Ruby on Rails

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

データベース

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

バリデーション

Validationとは特定の入力データが、求められた条件に当てまっているかをチェックするために使われます。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

0グッド

0クリップ

投稿2020/10/24 06:55

編集2020/10/25 03:11

前提・実現したいこと

Ruby on rails 初心者です。
現在、ECサイトの構築を行っており、つまずいたのはDBへの登録処理です。

onKeyUp:"AjaxZip3.zip2addr(this,'','prefecture','address');"を使って
郵便番号を入力すると都道府県や住所の一部が自動で挿入される仕組みを作り、そのデータをDBへ登録しようとしました。

発生している問題・エラーメッセージ

Validation failed: Prefecture can't be blank, Address can't be blank.

都道府県と住所がテーブルに登録されません。
ログを見ると、記載した都道府県と住所の情報は送られていますが、
テーブルにsaveする時にバリデーションエラーが出てしまいます。

onKeyUp:"AjaxZip3.zip2addr(this,'','prefecture','address');"を外して、都道府県や住所も全て入力すれば
しっかりとDBへは登録されます。

ログ Parameters: {"utf8"=>"✓", "authenticity_token"=>"M7JNCtF75uixj6s6kw8pZk0ChuDN4N8Ev8f1I0mYt0x75HyDOi1fG/EWf36RT8y2NKrxgMh5J7+JnLNeh0SqRA==", "farmer"=>{"name"=>"XXX農園", "email"=>"ccc@ccc.com", "tel"=>"00000000000", "postal_code"=>"0608588", "comment"=>"テストです。", "farmer_images_attributes"=>{"0"=>{"farmer_logo"=>#<ActionDispatch::Http::UploadedFile:0x00007fd6e90f76a8 @tempfile=#<Tempfile:/var/folders/19/8dw27p954zv9p2k_90hvh3ww0000gn/T/RackMultipart20201025-19521-ckzet6.png>, @original_filename="lemon.png", @content_type="image/png", @headers="Content-Disposition: form-data; name=\"farmer[farmer_images_attributes][0][farmer_logo]\"; filename=\"lemon.png\"\r\nContent-Type: image/png\r\n">, "farmer_image"=>#<ActionDispatch::Http::UploadedFile:0x00007fd6e90f7360 @tempfile=#<Tempfile:/var/folders/19/8dw27p954zv9p2k_90hvh3ww0000gn/T/RackMultipart20201025-19521-h9zj8i.png>, @original_filename="apple.png", @content_type="image/png", @headers="Content-Disposition: form-data; name=\"farmer[farmer_images_attributes][0][farmer_image]\"; filename=\"apple.png\"\r\nContent-Type: image/png\r\n">}}, "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}, "prefecture"=>"北海道", "address"=>"札幌市中央区", "commit"=>"登録"} (0.1ms) begin transaction ↳ app/controllers/farmers_controller.rb:10 Farmer Exists (0.3ms) SELECT 1 AS one FROM "farmers" WHERE LOWER("farmers"."email") = LOWER(?) LIMIT ? [["email", "ccc@ccc.com"], ["LIMIT", 1]] ↳ app/controllers/farmers_controller.rb:10 (0.2ms) rollback transaction ↳ app/controllers/farmers_controller.rb:10 Completed 422 Unprocessable Entity in 142ms (ActiveRecord: 2.2ms)

該当のソースコード

(views/farmers/new.html.erb)一部記載 ここで登録したい商品の情報を記入(下記はタグを複数選択可)            <%= form_for @product_resister, html: {class: "new_product"} do |f| %> <%= f.label :postal_code, "郵便番号", class:"form_field" %> <%= f.text_field :postal_code, class:"form_area", onKeyUp:"AjaxZip3.zip2addr(this,'','prefecture','address');", required:"required" %> <%= f.label :prefecture, "都道府県", class:"form_field" %> <%= f.text_field :prefecture, class: 'form_area', required:"required" %> <%= f.label :address, "住所", class:"form_field" %> <%= f.text_field :address, class: 'form_area', required:"required" %> <%= f.submit "登録", class:"resister_btn"%> <% end %>
(farmer.rb) class Farmer < ApplicationRecord attr_accessor :remember_token before_save {self.email = email.downcase } validates :name, presence: true, length: {maximum: 50} VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-]+(.[a-z\d\-]+)*.[a-z]+\z/i validates :email, presence: true, length: {maximum: 255}, format: {with: VALID_EMAIL_REGEX}, uniqueness: {case_sensitive: false} has_secure_password validates :password, presence: true, length: {minimum: 6}, allow_nil:true validates :tel, presence: true, length: {in: 10..11} validates :postal_code, presence: true validates :prefecture, presence: true validates :address, presence: true validates :comment, presence: true has_many :products, dependent: :destroy has_many :farmer_images, dependent: :destroy accepts_nested_attributes_for :farmer_images def Farmer.digest(string) cost = ActiveModel::SecurePassword.min_cost ? BCrypt::Engine::MIN_COST : BCrypt::Engine.cost BCrypt::Password.create(string, cost: cost) end def Farmer.new_token SecureRandom.urlsafe_base64 end def remember self.remember_token = Farmer.new_token update_attribute(:remember_digest, Farmer.digest(remember_token)) end def authenticated?(remember_token) return false if remember_digest.nil? BCrypt::Password.new(remember_digest).is_password?(remember_token) end def forget update_attribute(:remember_digest, nil) end end
farmers_Controller.rb class FarmersController < ApplicationController def new @farmer_resister = Farmer.new @farmer_resister.farmer_images.build end def create @farmer_resister = Farmer.new(farmer_params) if @farmer_resister.save! farmer_log_in @farmer_resister flash.now[:success] = "農家の登録が完了しました。" redirect_to farmer_path(@farmer_resister.id) else flash.now[:danger] = "農家登録に失敗しました。お手数ですが、もう一度登録しなおしてください。" render "new" end end private def farmer_params params.require(:farmer).permit(:name, :email, :tel, :postal_code, :prefecture, :address, :comment, :password, :password_confirmation, farmer_images_attributes: [ :id, :farmer_logo, :farmer_image ]) end end

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

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

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

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

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

no1knows

2020/10/24 09:58

productのモデルを追記してください。
winterboum

2020/10/24 13:08

logによる送られている情報とvalidationエラーのメッセージ詳細も
tomato185

2020/10/25 02:53

ご質問ありがとうございます。 追加情報を記載いたしました。
guest

回答1

0

ベストアンサー

Parameterにprefectureなどは含まれていますが、controllerが想定している構造にはなっていません。
「を外して、都道府県や住所も全て入力すればしっかりとDBへは登録されます。」の時と比べてみてください。違いが判るでしょう。

投稿2020/10/25 02:59

winterboum

総合スコア23329

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

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

tomato185

2020/10/25 03:09

winterboum様 ご回答ありがとうございます。 ログの違いを比較してみました。 ログには、farmer_resister.saveで失敗しているようでした。 なぜ、onKeyUp:"AjaxZip3.zip2addr(this,'','prefecture','address');"を使うとcontrollerの構造を変える必要があるのでしょうか。
tomato185

2020/10/25 03:38

"farmer" => {...}","address" => "",,,,,というようにfarmerの中に都道府県と住所が入っておりませんでした。 farmers_controller.rbのfarmer_paramsを変えたら良いでしょうか?
winterboum

2020/10/25 03:41

それはあまり良くないです。 "farmer" => {...}" のなかに収まるように viewなりjsなりを直した方が良いです
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問