我目前收到此错误。 无法找到没有ID的个人资料。我正在尝试创建一个配置文件表单,可以在用户注册后进行编辑和更新。我已将用户的 has_one 关联设置为个人资料。这是我的控制器的配置文件。
注意 - 使用设计
的routes.rb
resource :profile , :only => [ :edit, :update]
profile_controller.rb
class ProfilesController < ApplicationController
def edit
@profile = Profile.find(params[:id])
end
def update
@profile = Profile.find(params[:id])
@profile.update(params[:profile].permit(:example,:example))
end
end
user.rb模型 - 在新用户注册时创建个人资料
class User < ActiveRecord::Base
has_one :profile
after_create :create_profile
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
private
def create_profile
self.profile = Profile.create
end
end
见表格 - edit.html.erb
<div class="container">
<div class="row">
<div class="col-lg-3">
<%= render 'layouts/sidenav' %>
</div>
<%= form_for :profile, method: :patch do |f| %>
<div>
<%= f.label :example %>
<%= f.text_field :example %>
</div>
<div>
<%= f.label :example %>
<%= f.text_field :example%>
</div>
<div>
<%= f.submit %>
</div
<% end %>
</div>
</div>
答案 0 :(得分:1)
您的form_for正在使用配置文件的符号而不是实例变量......
你需要:
<%= form_for @profile do |f| %>
# etc
<% end %>
此外,您不应该在那里使用'patch'方法,因为Rails知道如何处理form_for
中的ActiveRecord实例。
修改:
如果您尝试使用不包含个人资料ID的路径进行编辑,则必须在编辑操作中执行类似操作(假设您有current_user
来引用用户已登录):
def edit
@profile = current_user.profile
end
当您使用params[:id]
查找个人资料时,Rails会在网址参数(您没有)中查找ID。
同样,在您的update
操作中,您需要根据用户查找个人资料。
def update
@profile = current_user.profile
# etc
end
答案 1 :(得分:0)
Couldn't find Profile without an ID
将是一个典型的例外
Profile.find(params[:id])
传递一个空值。所以似乎没有设置params [:id]。