rails无法找到个人资料

时间:2014-02-07 00:05:43

标签: ruby-on-rails ruby activerecord devise

我目前收到此错误。 无法找到没有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>

2 个答案:

答案 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]。