2015-06-12 4 views
0

Я хочу реализовать функцию сброса пароля, поэтому я последовал за this railscast, я получаю почту со ссылкой для перенаправления на страницу редактирования пароля, но здесь я получаю сообщение об ошибке.Пустой аргумент - форма для

Посмотреть

<h1>Reset Password</h1> 

<%= form_for @user, :url => password_reset_path(params[:id]) do |f| %> 
    <% if @user.errors.any? %> 
    <div class="error_messages"> 
     <h2>Form is invalid</h2> 
     <ul> 
     <% for message in @user.errors.full_messages %> 
      <li><%= message %></li> 
     <% end %> 
     </ul> 
    </div> 
    <% end %> 
    <div class="field"> 
    <%= f.label :password %> 
    <%= f.password_field :password %> 
    </div> 
    <div class="field"> 
    <%= f.label :password_confirmation %> 
    <%= f.password_field :password_confirmation %> 
    </div> 
    <div class="actions"><%= f.submit "Update Password" %></div> 
<% end %> 

Ошибка: First argument in form cannot contain nil or be empty

Я предполагаю, что @user пуст, я новичок в RoR, и я не знаю, почему я получаю эту ошибку

Пароль контроллер

class PasswordResetsController < ApplicationController 
    def new 
    render :layout => false 
    end 
    def create 

    user = User.find_by_email(params[:email]) 
    user.send_password_reset if user 
    redirect_to :connect, :notice => "An E-mail has been send" 
    end 
    def edit 
    render :layout => false 
    @user = User.find_by_password_reset_token!(params[:id]) 
    end 
    def update 
    @user = User.find_by_password_reset_token!(params[:id]) 
    if @user.password_reset_sent_at < 2.hours.ago 
    redirect_to new_password_reset_path, :alert => "Password &crarr; 
     reset has expired." 
    elsif @user.update_attributes(params[:user]) 
    redirect_to root_url, :notice => "Password has been reset." 
    else 
    render :edit 
    end 
end 
end 

ответ

0

Изменение четкости редактирования в

def edit 
    @user = User.find_by_password_reset_token!(params[:id]) 
    render :layout => false 

end 
+0

Я не знаю, почему это делает мне ошибку, но спасибо. но у меня новая ошибка. В этой строке 'elsif @ user.update_attributes (params [: user])' с запрещенными атрибутами –

+0

Используете ли вы Rails 3 или Rails 4? –

+0

Я использую Rails 4 –

0

вы должны добавить

@user = User.new 

к новому методу.

У вас также есть другая ошибка для вашего метода создания. нет создания пользователя.

class PasswordResetsController < ApplicationController 
    def new 
    @user = User.new 
    render :layout => false 
    end 

    def create 
    @user = User.new user_params 
    if @user.save 
     # your code to render success 
    else 
     # your code to render error 
    end 
    end 

    private 

    def user_params 
    params.require(:user).permit(:email) # add more 
    end 
end 
+0

Но я не хочу создавать пользователя –

+0

oh ok. но у вас есть эти ошибки. возможно, вы можете использовать его в любом случае – rob

0

Это ответ на '@ user.update_attributes (Params [: пользователя])' с запрещенными атрибуты ошибок.

Rails 4 имеет новую функцию, известную как strong parameters. Измените свой контроллер паролей на:

class PasswordResetsController < ApplicationController 
    def new 
    render :layout => false 
    end 
    def create 

    user = User.find_by_email(params[:email]) 
    user.send_password_reset if user 
    redirect_to :connect, :notice => "An E-mail has been send" 
    end 
    def edit 
    @user = User.find_by_password_reset_token!(params[:id]) 
    render :layout => false 
    end 
    def update 
    @user = User.find_by_password_reset_token!(params[:id]) 
    if @user.password_reset_sent_at < 2.hours.ago 
    redirect_to new_password_reset_path, :alert => "Password &crarr; 
     reset has expired." 
    elsif @user.update_attributes(user_params) 
    redirect_to root_url, :notice => "Password has been reset." 
    else 
    render :edit 
    end 
end 


    private 

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

end 
+0

Да, спасибо, я уже разрешил эту ошибку, это было решение –

+0

Добро пожаловать. –

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