我有两个型号
class User < ActiveRecord::Base
has_one :user_information, :dependent => :destroy
attr_accessible :email, :name
end
和
class UserInformation < ActiveRecord::Base
belongs_to :user
attr_accessible :address, :business, :phone, :user_id
end
创建用户后,我使用控制器的new和create动作创建了用户信息:
def new
@user = User.find(params[:id])
@user_information = @user.build_user_information
respond_to do |format|
format.html # new.html.erb
format.json { render json: @user_information }
end
end
def create
@user_information = UserInformation.new(params[:user_information])
respond_to do |format|
if @user_information.save
format.html { redirect_to @user_information, notice: 'User information was successfully created.' }
format.json { render json: @user_information, status: :created, location: @user_information }
else
format.html { render action: "new" }
format.json { render json: @user_information.errors, status: :unprocessable_entity }
end
end
end
一切正常,但当我尝试更新记录时,我收到此错误:
RuntimeError in User_informations#edit
Called id for nil, which would mistakenly be 4 -- if you really wanted the id of nil, use object_id
以下是我的user_information控制器的编辑和更新操作
def edit
@user_information = UserInformation.find(params[:id])
end
def update
@user_information = UserInformation.find(params[:id])
respond_to do |format|
if @user_information.update_attributes(params[:user_information])
format.html { redirect_to @user_information, notice: 'User information was successfully updated.' }
format.json { head :no_content }
else
format.html { render action: "edit" }
format.json { render json: @user_information.errors, status: :unprocessable_entity }
end
end
end
我以为我只需找到记录并编辑,但没有。有人可以帮帮我吗?
答案 0 :(得分:0)
尝试从belongs_to :user
中移除UserInformation
http://guides.rubyonrails.org/association_basics.html#the-has_one-association
讨论后更新:
您的链接助手应该在第一个位置带有@user
的两个参数。 (您可以从rake routes | grep user_information
)
<%= link_to 'Edit', edit_user_information_path(@user, @user_information) %>
其次在您的控制器中
params[:id] # => @user.id
params[:user_information_id] # => @user_information.id
因此,您应该将find
更改为
@user_information = UserInformation.find(params[:user_information_id])