正如你们之一在我的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_validity
是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'.
如何才能理解它创建后应该去'show'吗?我试图在这里复制但失败了。请帮忙。
更新:我见过here并且明白我们不应该在POST方法中使用重定向。但是,如何使用此信息并从denied_acess_path
方法转到display_command_list_path
或check_validity
答案 0 :(得分:0)
我想我解决了这个问题。
在登录方法中,我使用了以下代码
def login
respond_to do |format|
format.html
end
end
当我删除了respond_to块时,我能够执行代码。但我仍然不知道为什么会这样。对标记的响应是否在寻找check_validity.html.erb而不是login.html.erb?