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

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

ただいまの
回答率

90.46%

Railsのlog/development.logの見方を教えてください。

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 414

koume

score 141

Rails5.1.3でWebアプリケーション制作の勉強をしています。
createアクションで新規フォームから受け取ったデータを保存できなくて原因がわからず質問したところlogを
見てみましょう。とアドバイスを受けました。
コントローラのcreateアクションで@customer_form.saveが失敗しているようなのです。
そこでlog/development.logを表示しましたが記述されている内容がわからずどこが悪いのかもわからずに困っております。

log/development.log  (出力されたログ)

app/controllers/visitor/customers_controller.rb:9:in `create'
Started POST "/visitor/customer" for 10.0.2.2 at 2018-09-21 13:46:16 +0900
Processing by Visitor::CustomersController#create as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"3vPpGkNSLgir5/FOG+gv7CrWEePyDNSeUkJ7YANnVlR4n0QMH/gXI+TC/qIE/w8o0FpSkJun2YPXpXwn2cMigg==", "form"=>{"customer"=>{"email"=>"sato.ichiro@example.jp", "password"=>"[FILTERED]", "family_name"=>"佐藤", "given_name"=>"一郎", "family_name_kana"=>"サトウ", "given_name_kana"=>"イチロウ", "phones"=>{"0"=>{"number"=>"0184362632", "primary"=>"0"}, "1"=>{"number"=>"07011456699", "primary"=>"0"}}}, "inputs_home_address"=>"1", "home_address"=>{"postal_code"=>"9204278", "prefecture"=>"佐賀県", "city"=>"にかほ市", "address1"=>"開発1-2-4", "address2"=>"レイルズハイツ302号室"}}, "commit"=>"登録", "host"=>"fujiyoshi.nouen.com"}
Unpermitted parameter: :phones
Unpermitted parameters: :email, :password, :family_name, :given_name, :family_name_kana, :given_name_kana
#<Visitor::CustomerForm:0x007f168d4a9a48 @customer=#<Customer id: nil, email: "sato.ichiro@example.jp", email_for_index: nil, family_name: "佐藤", given_name: "一郎", family_name_kana: "サトウ", given_name_kana: "イチロウ", hashed_password: "$2a$10$Sh7h65EAWu1Z/hyZ5P825u41lMzNzoSA8DvXGy278Rb...", created_at: nil, updated_at: nil>, @inputs_home_address=true, @params=<ActionController::Parameters {"customer"=><ActionController::Parameters {"email"=>"sato.ichiro@example.jp", "password"=>"password", "family_name"=>"佐藤", "given_name"=>"一郎", "family_name_kana"=>"サトウ", "given_name_kana"=>"イチロウ", "phones"=>{"0"=>{"number"=>"0184362632", "primary"=>"0"}, "1"=>{"number"=>"07011456699", "primary"=>"0"}}} permitted: false>, "inputs_home_address"=>"1", "home_address"=><ActionController::Parameters {"postal_code"=>"9204278", "prefecture"=>"佐賀県", "city"=>"にかほ市", "address1"=>"開発1-2-4", "address2"=>"レイルズハイツ302号室"} permitted: false>} permitted: false>>
   (0.5ms)  BEGIN
  Customer Exists (0.5ms)  SELECT  1 AS one FROM `customers` WHERE `customers`.`email_for_index` = BINARY 'sato.ichiro@example.jp' LIMIT 1
   (0.3ms)  ROLLBACK
  Rendering visitor/customers/new.html.erb within layouts/customer
  Rendered visitor/customers/_phone_fields.html.erb (4.6ms)
  Rendered visitor/customers/_phone_fields.html.erb (1.9ms)
  Rendered visitor/customers/_customer_fields.html.erb (40.4ms)
  Rendered visitor/customers/_home_address_fields.html.erb (16.2ms)
  Rendered visitor/customers/_form.html.erb (66.0ms)
  Rendered visitor/customers/new.html.erb within layouts/customer (72.3ms)
  Rendered customer/shared/_header.html.erb (1.4ms)
  Rendered shared/_footer.html.erb (1.1ms)
Completed 200 OK in 1549ms (Views: 813.7ms | ActiveRecord: 1.2ms)
コンソールに表示された内容

app/controllers/visitor/customers_controller.rb:9:in `create'
Started POST "/visitor/customer" for 10.0.2.2 at 2018-09-21 13:46:16 +0900
Processing by Visitor::CustomersController#create as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"3vPpGkNSLgir5/FOG+gv7CrWEePyDNSeUkJ7YANnVlR4n0QMH/gXI+TC/qIE/w8o0FpSkJun2YPXpXwn2cMigg==", "form"=>{"customer"=>{"email"=>"sato.ichiro@example.jp", "password"=>"[FILTERED]", "family_name"=>"佐藤", "given_name"=>"一郎", "family_name_kana"=>"サトウ", "given_name_kana"=>"イチロウ", "phones"=>{"0"=>{"number"=>"0184362632", "primary"=>"0"}, "1"=>{"number"=>"07011456699", "primary"=>"0"}}}, "inputs_home_address"=>"1", "home_address"=>{"postal_code"=>"9204278", "prefecture"=>"佐賀県", "city"=>"にかほ市", "address1"=>"開発1-2-4", "address2"=>"レイルズハイツ302号室"}}, "commit"=>"登録", "host"=>"fujiyoshi.nouen.com"}
Unpermitted parameter: :phones
Unpermitted parameters: :email, :password, :family_name, :given_name, :family_name_kana, :given_name_kana
#<Visitor::CustomerForm:0x007f168d4a9a48 @customer=#<Customer id: nil, email: "sato.ichiro@example.jp", email_for_index: nil, family_name: "佐藤", given_name: "一郎", family_name_kana: "サトウ", given_name_kana: "イチロウ", hashed_password: "$2a$10$Sh7h65EAWu1Z/hyZ5P825u41lMzNzoSA8DvXGy278Rb...", created_at: nil, updated_at: nil>, @inputs_home_address=true, @params=<ActionController::Parameters {"customer"=><ActionController::Parameters {"email"=>"sato.ichiro@example.jp", "password"=>"password", "family_name"=>"佐藤", "given_name"=>"一郎", "family_name_kana"=>"サトウ", "given_name_kana"=>"イチロウ", "phones"=>{"0"=>{"number"=>"0184362632", "primary"=>"0"}, "1"=>{"number"=>"07011456699", "primary"=>"0"}}} permitted: false>, "inputs_home_address"=>"1", "home_address"=><ActionController::Parameters {"postal_code"=>"9204278", "prefecture"=>"佐賀県", "city"=>"にかほ市", "address1"=>"開発1-2-4", "address2"=>"レイルズハイツ302号室"} permitted: false>} permitted: false>>
   (0.5ms)  BEGIN
  Customer Exists (0.5ms)  SELECT  1 AS one FROM `customers` WHERE `customers`.`email_for_index` = BINARY 'sato.ichiro@example.jp' LIMIT 1
   (0.3ms)  ROLLBACK
  Rendering visitor/customers/new.html.erb within layouts/customer
  Rendered visitor/customers/_phone_fields.html.erb (4.6ms)
  Rendered visitor/customers/_phone_fields.html.erb (1.9ms)
  Rendered visitor/customers/_customer_fields.html.erb (40.4ms)
  Rendered visitor/customers/_home_address_fields.html.erb (16.2ms)
  Rendered visitor/customers/_form.html.erb (66.0ms)
  Rendered visitor/customers/new.html.erb within layouts/customer (72.3ms)
  Rendered customer/shared/_header.html.erb (1.4ms)
  Rendered shared/_footer.html.erb (1.1ms)
Completed 200 OK in 1549ms (Views: 813.7ms | ActiveRecord: 1.2ms)


コードは以下になります。

customers_controller.rb

class Visitor::CustomersController < Visitor::Base
  def new
    @customer_form = Visitor::CustomerForm.new
  end

  def create
    @customer_form = Visitor::CustomerForm.new
    @customer_form.assign_attributes(params[:form])
    if @customer_form.save
      flash.notice = '顧客アカウントを新規登録しました。'
      render action: 'new'
    else
      flash.now.alert = '入力に誤りがあります。'
      render action: 'new'
    end
  end

  private
  def customer_params
    @params.require(:customer).permit(:email, :password, :family_name, :given_name, :family_name_kana, :given_name_kana)
  end
end
visitor/customer_form.rb

class Visitor::CustomerForm
  include ActiveModel::Model

  attr_accessor :customer, :inputs_home_address
  delegate :persisted?, :save, to: :customer

  def initialize(customer = nil)
    @customer = customer
    @customer ||= Customer.new(family_name_kana: 'カタカナ', given_name_kana: 'カタカナ')
    (2 - @customer.personal_phones.size).times do
      @customer.personal_phones.build
    end
    self.inputs_home_address = @customer.home_address.blank?
    @customer.build_home_address unless @customer.home_address
    @customer.build_history unless @customer.history_ids
  end

  def assign_attributes(params = {})
    @params = params
    self.inputs_home_address = params[:inputs_home_address] == '1'

    customer.assign_attributes(customer_params)

    phones = phone_params(:customer).fetch(:phones)
    customer.personal_phones.size.times do |index|
      attributes = phones[index.to_s]
      if attributes && attributes[:number].present?
        customer.personal_phones[index].assign_attributes(attributes)
      else
        customer.personal_phones[index].mark_for_destruction
      end
    end

    if inputs_home_address
      customer.home_address.assign_attributes(home_address_params)
    else
      customer.home_address.mark_for_destruction
    end
  end

  private
  def phone_params(record_name)
    @params.require(record_name).permit(phones: [ :number, :primary ])
  end

  def customer_params
    @params.require(:customer).permit(:email, :password, :family_name, :given_name, :family_name_kana, :given_name_kana)
  end

  def home_address_params
    @params.require(:home_address).permit(:postal_code, :prefecture, :city, :address1, :address2
    )
  end
end

どなたか教えていただけないでしょうか?宜しくお願いします。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

check解決した方法

0

フォームに入力した値が登録されないことから始原因の追跡が始まったのですが
app/controllers/concerns/error_handlers.rbのコード記述ミスが原因のようです。
extend ActiveSupport::Concernをextend ActiveSupport::Concermと入力ミスをしていて
includedメソッドが利用できなくmodels/concernsのフィルのincludedメソッドが使えなかったのが原因のようでした。全く見当違いの所を長々と悩んでいました。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 90.46%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる