我正在按照Rails教程爲自己做一個小項目,然後嘗試進度。Rails3關聯和accept_nested_attributes_for在驗證user_id時失敗
嗯,我正面臨一個問題,我找到了解決方案,但我會很感激任何想法和意見,因爲要使它工作,我必須禁用關聯驗證。
上下文如下所示:應用程序(它實際上的大名稱...)讓用戶跟蹤其重量。我希望當用戶註冊時,他/她在旅途中輸入第一項措施。
所以這裏的簡化模型:
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
我發現使它工作的唯一方法是擺脫了:USER_ID確認爲存在於測量模型。我想強調,當此驗證關閉時,用戶將被保存,度量將被保存並與新創建的用戶正確關聯。
我做錯了什麼? Measure模型中的user_id存在驗證真的很有用(它在Rails教程中,它對我來說很合理)?如果是,爲什麼測量驗證在打開時失敗?
非常感謝。
在你的'度量/字段'中,你是否爲'user_id'提供了一個隱藏字段,以確保它能夠通過這個過程? –
啊,不,我不知道!但user_id不可訪問,並且在此階段它不會退出,因爲我們在用戶創建過程中。 無論如何,我會試試這個,感謝 –
確定爲:user_id是無法訪問我的錯誤 無法大規模指派保護的屬性:user_id說明 –