Ruby on rails 空参数-的形式

Ruby on rails 空参数-的形式,ruby-on-rails,passwords,Ruby On Rails,Passwords,我想实现一个重置密码功能,所以我遵循了,我收到邮件的链接重定向到编辑密码页面,但我在这里得到一个错误 查看 <h1>Reset Password</h1> <%= form_for @user, :url => password_reset_path(params[:id]) do |f| %> <% if @user.errors.any? %> <div class="error_messages">

我想实现一个重置密码功能,所以我遵循了,我收到邮件的链接重定向到编辑密码页面,但我在这里得到一个错误

查看

<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 %>

将def编辑更改为

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

end
你必须加上

@user = User.new
你的新方法

您的create方法还有另一个错误。没有用户创建

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
类密码重置控制器false
结束
def创建
@user=user.new user\u参数
如果@user.save
#您的代码将显示成功
其他的
#要呈现错误的代码
结束
结束
私有的
def用户参数
参数要求(:用户)。允许(:电子邮件)#添加更多
结束
结束

这是对带有禁止属性错误的“@user.update_attributes(params[:user])”的回答

Rails 4有一个新特性,称为。 将密码控制器更改为:

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
类密码重置控制器false
结束
def创建
用户=用户。通过电子邮件查找(参数[:电子邮件])
user.send_password_如果用户
将_重定向到:connect,:notice=>“已发送电子邮件”
结束
定义编辑
@user=user.find\u by\u password\u reset\u token!(参数[:id])
render:layout=>false
结束
def更新
@user=user.find\u by\u password\u reset\u token!(参数[:id])
如果@user.password\u reset\u在<2小时前发送
重定向到新密码重置路径:警报=>“密码&crarr;
重置已过期。“
elsif@user.update_属性(用户参数)
将\重定向到根\ url,:notice=>“密码已重置。”
其他的
渲染:编辑
结束
结束
私有的
def用户参数
参数require(:user).permit(:name,:email\u id,:password)
结束
结束

我不知道为什么会出错,但谢谢。但我有一个新的错误。在这一行“elsif@user.update_attributes(params[:user])”上使用禁止的属性您使用的是Rails 3还是Rails 4?我已经发布了,很抱歉延迟了。但是我不想创建一个Useroh ok。但是你有这些错误要纠正。也许你可以用它任何方式是的,谢谢你,我已经解决了这个错误,这是解决办法
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