0

正如你们中的一个人在我之前的问题中所说的那样,我试图提出一个帖子请求。

这是我的登录视图

<%= 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_validity是一种post方法,我在我的 post 方法中编写了以下代码

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'.如何理解创建后它应该去“显示”的? 我试图在这里复制它但失败了。请帮忙。

更新:我在这里看到并理解我们不应该在 POST 方法中使用重定向。但是我将如何使用这些信息并去denied_acess_pathdisplay_command_list_path来自这个check_validity方法

4

1 回答 1

0

我想我解决了这个问题。

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

  def login

  respond_to  do |format|   
  format.html
  end

  end

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

于 2012-07-06T18:04:41.753 回答