我正确地进行了these更改:
现在在'app / controllers / users_controller.rb '我有这段代码:
def reset
respond_to do |format|
format.html # reset.html.erb
end
end
def send_reset
respond_to do |format|
if @user.errors.empty?
...
else
format.html { render :action => 'reset' }
end
end
end
现在在'config / routes.rb'中我有这段代码:
resources :users do
collection do
get 'reset'
post 'reset'
get 'send_reset'
post 'send_reset'
end
end
如果我提交与changes
相关的表单('app / views / users / reset.html.erb')<%= form_tag( send_reset_users_path, :method => :post ) do %>
<%= text_field_tag :email %>
<%= submit_tag("Send") %>
<% end %>
浏览器网址变为“ ... / users / send_reset ”,但我想要“ ... / users / reset ”(我认为问题出在'format.html {render:action =&gt;'reset'}'无法正确呈现操作的代码)或者可能是路线。
简言之,我的目标是像我一样使用'send_reset'动作,例如,'update','create'或'destroy'动作(来自脚手架),在我的情况下,没有创建'app / views / users / send_reset.html.erb'文件,但只是调用操作方法来处理我的问题。我该怎么做?
答案 0 :(得分:1)
默认的Rails URL方案是
:host/:controller/:action/:id
从
重命名控制器操作def send_reset
end
到
def reset
end
并重命名视图和路线以匹配此更改。
但是你已经使用了重置for post和send_reset for Post但你希望它们是相同的只是做一些不同的事情,如果你要求页面或发送表格POST。
def reset
case request.method
when :post
# send them an email
# redirect_to :somewhere_else
else # :get, :put, :delete
# render the view with the recovery form
end
end