为什么我不能显示编辑表单?

时间:2014-09-25 07:58:17

标签: ruby-on-rails ruby-on-rails-4 nomethoderror

我创建了一个应用,其中用户拥有个人资料,个人资料属于用户。 它已设置,因此在创建用户(在用户控制器中)时会自动创建配置文件

我不是要设置它,以便用户可以访问编辑页面(配置文件控制器 - >编辑操作)并通过渲染表单编辑他们的配置文件信息(使用_form partial)

我无法理解为什么我无法显示编辑表单,据我所知,方法定义正确?有人有任何想法吗?非常感谢任何帮助!

浏览器:

NoMethodError in ProfilesController#edit
undefined method `user' for nil:NilClass    

  def edit
    @profile = @profile.user
  end

  def destroy

个人资料管理员:

class ProfilesController < ApplicationController
  before_action :logged_in_user,  only: [:edit, :destroy]

  def edit
    @profile = @profile.user
  end

  def destroy
  end
end

用户控制器

class UsersController < ApplicationController
  before_action :logged_in_user,  only: [:edit, :update]
  before_action :correct_user,    only: [:edit, :update]

  def new
    @user = User.new
  end

  def create
    @user = User.new(user_params)
    if @user.save
      @user.profile = Profile.new
      @user.send_activation_email
      flash[:info] = "Please check your email to activate your account."
      redirect_to root_url
    else
      render 'new'
    end
  end

...

视图/简档/ edit.html.erb

<% provide(:title, 'Edit Profile') %>
<h1>Editing profile</h1>

<div class="row">
  <div class="col-md-6 col-md-offset-3">
    <%= form_for(@profile) do |f| %>
      <%= render 'form', f: f %>
      <%= f.submit "Edit Information", class: "btn btn-primary" %>
    <% end %>
  </div>
</div>

视图/简档/ _form.html.erb

<%= render 'shared/error_messages' %>

<%= f.label :first_name %>
<%= f.text_field :first_name, class: 'form-control' %>

...

2 个答案:

答案 0 :(得分:1)

在不知道你的身份验证系统是什么样的情况下,虽然你提到你看过设计并构建了自己的身份,所以我认为你需要在你的编辑行动中做这样的事情

  def edit
    @profile = current_user.profile
  end

答案 1 :(得分:0)

您想要访问用户&#39;个人资料而不是个人资料用户,请在个人资料管理器中尝试此操作。