2

私は、Postgresに日付型の誕生日フィールドを持つuserというRailsモデルを持っています。日付が更新に失敗しましたが、Update(Rails ActiveRecord)の場合にtrueを返します

私の最初の問題は、ユーザーの値を更新する方法がわかりません。 "10/10/1980"のような文字列を渡すと、更新されません。

第二の問題は、誕生日が更新されていない場合でも、RailsはUser.update(user_params)のためにtrueを返すことで、アクション

私の二つの質問:

  1. どのように日付フィールドを更新することができます?
  2. 不正な日付が渡された場合、レールでエラーが発生することを確認するにはどうすればよいですか?

どのように日付フィールドを更新できますか?

以下のコントローラからの更新方法。足場からの標準。

# PATCH/PUT /users/1 
    # PATCH/PUT /users/1.json 
    def update 
    respond_to do |format| 
     puts(user_params) 
     if @user.update(user_params) 
     format.html { redirect_to @user, notice: 'User was successfully updated.' } 
     format.json { render :show, status: :ok, location: @user } 
     else 
     format.html { render :edit } 
     format.json { render json: @user.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

編集:PARAMS:。

def user_params 
    params.require(:user) 
      .permit(:points, :payment_option, :first_name, :last_name, 
        :payment_email, :phone_number, :facebook_id, :profile_pic_url, 
        :locale, :timezone, :gender, :email, :country, :city, 
        :age_group, :birthday, :employment_status, :occupation, 
        :education_level, :income_bracket) 
    end 

Railsの私は、更新文の後プット(user_params)を追加したことに注意してください

Started PATCH "/api/v1/users/1" for 127.0.0.1 at 2017-12-07 19:16:37 +0800 
Processing by UsersController#update as JSON 
    Parameters: {"user"=>{"birthday"=>"12dsafkljfsldk"}, "id"=>"1"} 
    User Load (0.3ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT $2 [["id", 1], ["LIMIT", 1]] 
Can't verify CSRF token authenticity. 
{"birthday"=>"10/10/1900"} 
    (0.2ms) BEGIN 
    (0.1ms) COMMIT 
    Rendering users/show.json.jbuilder 
    Rendered users/_user.json.jbuilder (0.6ms) 
    Rendered users/show.json.jbuilder (1.6ms) 
Completed 200 OK in 31ms (Views: 5.9ms | ActiveRecord: 3.1ms) 

私はbefore_updateを使用することができることを期待していた(ログ保存する前に日付文字列をDateオブジェクトに解析しますが、selfのようには見えません。誕生日もモデルに表示されます。

+1

"文字列型の"コードを書き込まないようにしてください。日付がある場合は、 'Date'クラスを使用してください。文字列ではありません。とにかく、それは言った - *なぜ*それは保存されません?レールのログは何を言いますか? '@ user.errors'とは何ですか?あなたはどんな振る舞いをしていますか、まさにあなたは「それは救いません」と言っていますし、「それは誤りを投げない」ということですか?あなたのコードによれば、レコードが保存されなかった場合、エラー*がレンダリングされます! –

+0

このパラメータは、別のサーバーからのHTTP呼び出しでJSON本体として渡されています。 – JCDJulian

+0

私は何を見ています。私は@ user.update(user_params)がtrueを返しているのを見ているので、「保存していますが、@ user.birthdayはまだ空です。 user_paramsは '{birthday" => "10-10-1900"} – JCDJulian

答えて

0

場所

protect_from_forgery with: :null_session, if: Proc.new { |c| c.request.format == 'application/json' } 

それはその後、動作しない場合は、あなたのApplicationControllerにこの行。アクションをスキップしてください

skip_before_action :verify_authenticity_token 
関連する問題