【问题标题】:undefined method update for nil classnil 类的未定义方法更新
【发布时间】:2014-02-21 07:04:19
【问题描述】:

用户登录后,我正在尝试收集其他信息以在数据库中更新

这是我的控制器

  def show
   @user = User.find(params[:id])
  end

  def new
   @user = User.new
  end


  def additional_info
   @user = User.find params[:id]
  end


  def update
    if @user.update(user_addinfo)
        redirect_to user_path(@user), notice: 'User was successfully updated.'
    else
        render action: 'additional_info'
    end
  end


  def create
    @user = User.new(user_params)
    if @user.save
     #session[:user_id] = @user.id
     #UserMailer.welcome_email(@user).deliver
     sign_in @user
     redirect_to  additional_info_path(@user)
     flash[:success] = "Welcome to InYourShoes!"
    else
     render'new'
   end
 end  

private

def user_params 
  params.require(:user).permit(:name, :email, :password, :password_confirmation)
end


def user_addinfo
  params.require(:user).permit(:year)
end
end

如果@user.update(user_addinfo) 错误发生在def update 函数,rails 说它未定义。 def user_addinfo 是一个操作方法,def additional_info 是实际页面

页面视图:

  <div class="row">
   <div class="col-xs-12 col-sm-6 col-sm-offset-3">
    <%= form_for(@user, :html => {:class => 'form-horizontal'}) do |f| %>
    <fieldset>
     <p>Do you have experience in Business? If yes, select one of the following:
      <div class="input-group">
        <div class="input-group-btn">
          <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown">Select one <span class="caret"></span></button>
    <ul class="dropdown-menu">
      <li><a href="#">Entrepreneurship</a></li>
      <li><a href="#">Investments</a></li>
      <li><a href="#">Management</a></li>
      <li class="divider"></li>
      <li><a href="#">All of the Above</a></li>
    </ul>
  </div><!-- /btn-group -->
  <%= f.text_field :year , :class => "form-control", :placeholder => "Years of experience" %>
 </div>
</p>

<div class = "center form-actions">
<%= f.submit "Submit", class: "btn btn-lg btn-primary" %>
</div>
</fieldset>
<% end %> 
 </div>
  </div>

我是否将@user 保存在错误的位置?我对@variablename 实例变量的概念还是很陌生...非常感谢您的帮助和解释

【问题讨论】:

    标签: ruby-on-rails ruby


    【解决方案1】:

    这是因为你没有在“更新”方法中初始化@user。

    通常你需要像在“show”方法中那样做一些事情。

    @user = User.find(params[:id])
    

    您当前的代码,“更新”方法中的@user 为零,因为您没有为其分配任何值。而“nil”变量没有“update”方法。

    【讨论】:

      【解决方案2】:

      您可能不应该尝试重载更新函数来捕获编辑和更新的功能(您正在这样做,其他答案忽略了这一点)。但是@user在表单提交时为nil的原因可能是因为这行:

      render action: 'additional_info'
      

      我猜那条线没有达到你的预期。而不是运行addition_info 操作并渲染表单,我相信这只是执行渲染。您可能想要redirect_to 'additional_info' 并在需要时为其添加路线。然后您可以确保表单正确地将@user 对象提交回更新函数。

      【讨论】:

        【解决方案3】:

        您必须在更新之前获取用户的附加信息

        def update
          @user = User.find(params[:id])
          if @user.update_attributes(user_addinfo)
          #your redirection
          else
          #your redirection
          end
        end
        

        【讨论】:

          【解决方案4】:
           def update
              self.additional_info
              if @user.update(user_addinfo)
                  redirect_to user_path(@user), notice: 'User was successfully updated.'
              else
                  render action: 'additional_info'
              end
           end
          

          @user 不存在 update,你需要先创建它,你已经完成了

          【讨论】:

            猜你喜欢
            • 2013-07-23
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-01-03
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-10-07
            相关资源
            最近更新 更多