2014-02-21 3 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 

ошибка возникает в опре функция обновления, если @ user.update (user_addinfo), рельсы говорят о ее неопределенности. Защиту user_addinfo является метод действия и четкости 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

Это потому, что вы не инициализировали @user в методе «обновления».

Обычно вам нужно сделать что-то подобное в методе «показать».

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

Ваш текущий код, @user в методе «обновления» равен нулю, потому что вы не присвоили ему никакого значения. А переменная «nil» не имеет метода «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, вам нужно создать его первый, который вы вроде уже сделали

Смежные вопросы