如何使用“更新”,“创建”或“销毁”操作(来自脚手架)等方法操作?

时间:2010-12-19 05:15:29

标签: ruby-on-rails forms controller action routes

我正确地进行了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'文件,但只是调用操作方法来处理我的问题。我该怎么做?

1 个答案:

答案 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