2012-07-06 62 views
0

正如你在我的previous問題中所說的那樣,我試圖發出一個post請求。Ruby on rails使用post方法重定向到另一個視圖

這裏是我的登錄視圖

<%= 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"錯誤。我在我的routes.rb中包含了post "authorization/check_validity"。看來我錯過了這裏非常基本的東西:(請讓我知道爲什麼它不能重定向到我提到的路徑而不是尋找check_validity.html.erb

我記得當我們腳手架,並點擊新帖子並提交它,它重定向創建方法是一個post請求,然後自動重定向,以顯示方法是'get'.它如何能夠理解它應該在創建後顯示?我試圖在這裏複製但失敗。請幫助

更新:我已經看到here和了解,我們不應該使用重定向的POST方法,但如何將我使用這個信息,去denied_acess_pathdisplay_command_list_path從這個。方法

+0

您確定您正在實施正確的控制器操作嗎? – nicholaides 2012-07-06 17:32:06

+0

@nicholaides我發現我不應該使用重定向,控制器有'post'方法的'check_validity'動作,並在我的路由中添加了路由發佈「controller/check_validity'。 – user1455116 2012-07-06 17:35:39

回答

0

我想我解決了這個問題。

在登錄方法I中使用的下面的代碼

def login 

    respond_to do |format| 
    format.html 
    end 

    end 

當我除去respond_to代碼塊,我能夠執行代碼。但我仍然不知道爲什麼會發生這種情況。是否迴應標籤尋找check_validity.html.erb而不是login.html.erb?

+0

'respond_to' block是不正確的。錯過'do'。或者是一個錯字? – nowk 2012-07-06 18:08:19

+0

@kwon這是一個錯字 – user1455116 2012-07-06 18:15:32