Ruby on rails使用post方法重定向到另一个视图

时间:2012-07-06 17:21:32

标签: ruby-on-rails http-post

正如你们之一在我的previous问题中所说,我试图提出要求。

这是我的登录视图

<%= form_for :check_validity, :method => "post", :url => {:action => "check_validity"} do |f| %>            
              <%= f.label :username %>
                  <%= f.text_field :username %><br />
                  <%= f.label :password %>
                  <%= f.password_field (:password)%><br />
                  <%= f.submit "Submit"%>
                <% end%>

由于check_validitypost方法,我在帖子方法中编写了以下代码

def check_validity
     @USER = params[:display_command_list][:username]
     @PASS = params[:display_command_list][:password]      
     @HOST = 'hostname'
     Net::SSH.start( @HOST, @USER, :password => @PASS ) do|ssh|
     @result = ssh.exec!("command")
     end
         if(@result =~ /somestring/)
          redirect_to display_command_list_path({:username => @USER, :password => @PASS})
         else
          redirect_to denied_access_path
         end
  end

但是当我在登录页面输入用户名和密码并点击提交按钮时,它会转到这个帖子方法并给我"Missing template authorization/check_validity"错误。我在post "authorization/check_validity"中添加了routes.rb。似乎我在这里遗漏了一些非常基本的东西:(。请让我知道为什么它无法重定向到我提到的路径而不是寻找check_validity.html.erb

我记得当我们脚手架,点击新帖并提交时,它会重定向到创建方法,这是一个帖子请求,然后自动重定向到显示方法'get'.如何才能理解它创建后应该去'show'吗?我试图在这里复制但失败了。请帮忙。

更新:我见过here并且明白我们不应该在POST方法中使用重定向。但是,如何使用此信息并从denied_acess_path方法转到display_command_list_pathcheck_validity

1 个答案:

答案 0 :(得分:0)

我想我解决了这个问题。

在登录方法中,我使用了以下代码

  def login

  respond_to  do |format|   
  format.html
  end

  end

当我删除了respond_to块时,我能够执行代码。但我仍然不知道为什么会这样。对标记的响应是否在寻找check_validity.html.erb而不是login.html.erb?