2014-02-21 42 views
0

中,我試圖收集更多的信息在數據庫中未定義的方法更新

這是我的控制器

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 

更新用戶登錄後在DEF出現錯誤更新函數如果@ user.update(user_addinfo),rails說它未定義。 高清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實例變量的概念不太瞭解......幫助和解釋非常感謝

回答

0

這是因爲您沒有在「update」方法中初始化@user。

通常你需要做一些像你在「show」方法中做的事情。

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

您當前的代碼@user在「update」方法中爲零,因爲您沒有爲其指定任何值。而一個「無」變量沒有方法「更新」。

0

你可能不應該試圖超載你的更新函數來捕獲編輯和更新(你正在做的,其他答案忽略了這一點)的功能。但原因@user是在表單提交零大概是這行的原因是:

render action: 'additional_info' 

我猜那條線是不是做你的期望。我並不是運行addition_info動作並渲染表單,而是相信這只是執行渲染。如果需要,您可能需要redirect_to 'additional_info'併爲其添加路線。然後您可以確保表單正確提交@user對象返回到更新功能。

0

你必須在更新前獲取用戶信息,它

def update 
    @user = User.find(params[:id]) 
    if @user.update_attributes(user_addinfo) 
    #your redirection 
    else 
    #your redirection 
    end 
end 
0
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,你需要先創建它,這你那種已經完成

相關問題