私はRailsチュートリアルに従って、自分で小さなプロジェクトを実行してから、進行を試みています。
解決策を見つけた問題に直面していますが、それを機能させるには、関連付けの検証を無効にする必要があるため、考えや意見をいただければ幸いです。
コンテキストは次のとおりです。アプリケーション(実際に実行することのビッグネーム...)には、ユーザーが自分の体重を追跡する必要があります。ユーザーがサインアップするときに、外出先で最初の小節を入力してほしい。
簡略化されたモデルは次のとおりです。
User.rb
class User < ActiveRecord::Base
attr_accessible :email, :name, :password, :password_confirmation, :measures_attributes
has_secure_password
has_many :measures, dependent: :destroy
accepts_nested_attributes_for :measures
# here goes validations before_save, etc. taken from the Rails Tutorial
end
Measure.rb
class Measure < ActiveRecord::Base
attr_accessible :weight
belongs_to :user
# This is kind where the problem is...
# If I deactivate the validation for user_id everyhing goes fine
validates :user_id, presence: true
validates :weight, presence: true, numericality: { greater_than: 0 }
default_scope order: 'measures.created_at ASC'
end
これがユーザーコントローラーです
class UsersController < ApplicationController
# GET /users/new
def new
@user = User.new
@user.measures.build
end
# POST /users
def create
@user = User.new(params[:user])
if @user.save
sign_in @user
flash[:success] = "Hi #{@user.name}. Welcome !"
redirect_to @user
else
render :new
end
end
end
これがユーザーのための部分的なフォームです:
<%= form_for(user) do |user_form| %>
<%= render 'shared/error_messages', object: user_form.object %>
<%= render 'users/fields', user_builder: user_form %>
<%= user_form.fields_for :measures do |measure_fields| %>
<%= render 'measures/fields', measure_builder: measure_fields, full: true %>
<% end %>
<%= user_form.submit submit_text, class: 'btn btn-large btn-primary' %>
<% end %>
また、フォームに正しく入力しても、次のエラーが発生します。
* Measures user can't be blank
それを機能させるために私が見つけた唯一の方法は、Measureモデルに存在するための:user_id検証を取り除くことです。この検証がオフの場合、ユーザーが保存され、メジャーが保存され、新しく作成されたユーザーに正しく関連付けられることを強調したいと思います。
私は何か間違ったことをしていますか?Measureモデルの:user_idプレゼンス検証は本当に便利ですか(Railsチュートリアルにあり、私にとっては完全に理にかなっています)?はいの場合、オンになっているときにメジャー検証が失敗するのはなぜですか?
よろしくお願いします。