我是一名初学者,现在已经花了好几个小时试图找出我的“生成新密码”链接的原因,该链接应该在我的用户控制器中执行我的自定义update_password操作,然后将密码重新刷回屏幕(后来我计划通过电子邮件或短信发送此信息,但现在可以这样做)继续执行创建方法/操作... 我知道我有两个用于用户索引屏幕的POST方法......但是无法理解(因为我甚至将它放在路径文件中)为什么创建是一个不断执行的方法。我知道它不会转到更新方法,因为我用调试器记录消息填充它,它不会显示在任何地方。 (并且日志记录处于活动状态,因为我看到索引方法记录消息)
以下是我正在做的事情:
routes.rb文件提取:
match 'users?user_id=(:user_id)', to: "users#update_password", via: :post, as: "users_update_password"
资源:用户
rake路由(控制器用户)
users_update_password POST /users?user_id=(:user_id)(.:format) users#update_password
users GET /users(.:format) users#index
POST /users(.:format) users#create
new_user GET /users/new(.:format) users#new
edit_user GET /users/:id/edit(.:format) users#edit
user GET /users/:id(.:format) users#show
PUT /users/:id(.:format) users#update
DELETE /users/:id(.:format) users#destroy
signup /signup(.:format) users#new
users_controller.rb
def update_password
logger.info "Inside update_password"
logger.flush
password= generate_password()
logger.debug "Password is #{password}"
@user = User.find_by_id(params[:user_id])
logger.debug "user is #{@user}"
if @user.update_attributes(password:password, password_confirmation:password)
logger.info "inside the if"
flash[:notice] = "New password for user #{@user.name}: #{password}"
logger.debug "Flash is #{flash}"
redirect_to users_path
else
logger.debug "I am on else of update_password"
flash[:alert] = "Name: #{@user.name} password: #{password}"
render 'index'
end
端
def index
logger.info "Inside controller index method"
@users = User.paginate(page: params[:page])
端
_user.html.erb
<% if current_user.admin? && !current_user?(user) %>
| <%= link_to "delete", user, method: :delete, confirm: "Are you sure?" %>
| <%= link_to "Generate new password", users_update_password_path(:user_id=>user.id), method: :post, confirm: "Are you sure? This will reset current password" %>
<% end %>
感谢您的帮助
答案 0 :(得分:0)
如果你把它作为资源路线的一员,它可能会简化一些事情吗?
resources :users do
member do
post 'update_password'
end
end
然后路径助手可能看起来像
link_to "Generate new password", update_password_user_path(user), method: :post
# POST. /users/:id/update_password
http://guides.rubyonrails.org/routing.html#adding-more-restful-actions
答案 1 :(得分:0)
使用HTTP POST时,数据不会在URL中发送。您的路由正在寻找URL中的数据,这是通过HTTP GET完成的。因此,如果您想使用POST,请将您的路线设置为:
post "users/update_password" => "users#update_password", :as => "users_update_password"