我与简单的用户模型和个人资料模型有一对一的关系:
模型/用户
class User < ActiveRecord::Base
authenticates_with_sorcery!
attr_accessible :email, :password, :password_confirmation
has_one :profile, :dependent => :destroy
validates_presence_of :password, :on => :create
validates :password, :confirmation => true,
:length => { :within => 6..100 }
email_regex = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
validates :email, :presence => true,
:format => { :with => email_regex },
:uniqueness => {:case_sensitive => false},
:length => { :within => 3..50 }
end
模型/简档
# == Schema Information
#
# Table name: profiles
#
# id :integer not null, primary key
# weight :decimal(, )
# created_at :datetime
# updated_at :datetime
#
class Profile < ActiveRecord::Base
attr_accessible :weight
belongs_to :user
end
我这样做是因为我希望用户能够随着时间的推移跟踪重量以及在配置文件中存储其他更多静态数据,例如身高。
但是,我的new和create方法似乎无法正常工作。我提交了新动作,我收到了这个错误:
undefined method `build' for nil:NilClass
profile_controller
class ProfilesController < ApplicationController
def new
@profile = Profile.new if current_user
end
def create
@profile = current_user.profile.build(params[:profile])
if @profile.save
flash[:success] = "Profile Saved"
redirect_to root_path
else
render 'pages/home'
end
end
def destory
end
end
和新的
的个人资料视图<%= form_for @profile do |f| %>
<div class="field">
<%= f.text_field :weight %>
</div>
<div class="actions">
<%= f.submit "Submit" %>
</div>
<% end %>
提前感谢您提供的任何帮助。 Noob在这里!
答案 0 :(得分:2)
has_one
关联的构建语法与has_many
关联不同。
按如下方式更改您的代码:
@profile = current_user.build_profile(params[:profile])
参考:SO Answer