2

正如标题所述,我正在使用设计。我遇到了这个 链接,它描述了这样做的过程。我有这个用户控制器:

    def update_password
      @user = User.find(current_user.id)
      #raise @user.to_yaml
      if @user.update_attributes(params[:user])
        # Sign in the user by passing validation in case his password changed
        sign_in @user, :bypass => true
        #flash[:notice] = "Password Successfully Changed"
        redirect_to settings_path
      else
        flash[:notice] = @user.errors.full_messages
        render password_path
      end
    end

忽略#raise @user.to_yaml. 而这个观点:

        <h1>Change Password</h1>

        <%= form_for(:user, :url => { :action => 'update_password'}) do |f| %>
            <div>
                <%= f.label :current_password %>
                <%= f.password_field :current_password %>
            </div>

            <div>
                <%= f.label :password %>
                <%= password_field_tag :password %>
            </div>

            <div>
                <%= f.label :password_confirmation %>
                <%= f.password_field :password_confirmation %>
            </div>

          <div>
                <%= f.submit "Change Password" %>
            </div>
        <% end %>

我将该视图映射到此控制器方法:

   def password
      @user = current_user
    end

将操作和视图分开,我的 config/routes.rb 是这样的: match '/password' => 'users#password', :as => 'password'

当我单击表单中的“更改密码”按钮时,就会出现问题。这是它带给我的链接:“http://localhost:3000/assets?action=update_password&controller=users”,我收到错误“找不到 id=assets 的用户”

我不知道它为什么以这种方式行事以及我做错了什么,因为我复制了网页上所说的内容。有没有人有这方面的经验并且可以帮助我?谢谢!

4

1 回答 1

1

如果您使用的是 Rails 3 或更新版本,您可以使用资源语法设置您的路线:

resources :users do
  member do # These routes will apply to specific model instances
    get 'password' # /users/:id/password
    put 'update_password' # /users/:id/updated_password
  end
end

那么你就可以在你的form_for声明中使用路径助手

<%= form_for @user, :url => update_password_user_path(@user) do |form| %>
...
<% end %>
于 2012-06-20T04:07:57.487 回答