2011-07-27 39 views
0

我是Rails的新手,現在正試圖在Rails中編寫一個小項目。作爲這個項目的一部分,我想處理一個表單數據(密碼)。我的形式是在Ruby on Rails中處理表單數據

<form name="input" action="http://0.0.0.0:3000/submit/" method="get"> 

Password: <input type="text" name="password" /> 

<input type="submit" value="Login" /> 

如果輸入的密碼是正確的我想要顯示另一html頁面,原來的密碼沒有存儲在數據庫,意味着只是想以比較字符串。我使用'rails generate controller project'創建了一個控制器和視圖。我認爲密碼匹配的代碼應該寫在'app/controllers'目錄下的'project_controller.rb'文件中。但是,如何編寫密碼匹配代碼以及如何在'routes.rb'文件中映射url?如果'get'方法更改爲'post',那麼需要進行哪些必要更改?

回答

4

所有的routes.rb首先是文件,URL映射到一個功能上的控制器

路由的基本的例子就是喜歡這裏

Foo::Application.routes.draw do 
    get '/form' => 'project#form' 
    get '/submit' => 'project#submit' 
    get '/logedin' => 'project#logedin' 
end 

有我在project_controller.rb 3函數映射到一個功能 你可以改變它通過改變「獲得」到「後」

這裏是project_controller.rb的示例代碼張貼

class ProjectController < ApplicationController 
def form 
    #will render view/project/form.html.erb 
end 

def submit 
    if params[:password] == 'secret' 
     redirect_to '/logedin' 
    else 
     #you can redirect to form again 
     #or render the form again 
     render 'form' #render the view/project/form.html.erb 
    end 
end 

def logedin 
    render :text => 'you are loged in' 
end 

形式函數將只呈現默認視圖,其中是在應用程序/視圖/項目/ form.html.erb

提交是主要的邏輯。你可以使用變量訪問表格數據caled params

代碼是直截了當的。你可以學習軌道上的細節http://guides.rubyonrails.org/

+0

我不認爲它是一個很好的做法,指定窗體並在路線中提交..而是最好命名控制器中的方法和視圖具有相同的名稱,並進行重定向並顯示來自控制器的通知 –

+0

謝謝ahmy。你的代碼是正確的,並且工作完美。這對我幫助很大。再一次感謝你。 –

+0

是的,我知道這不是最好的做法。你應該儘可能使用helper使用表單並使用資源路由。這個例子只是爲了顯示rails機制處理請求和路由請求到一個函數。 – ahmy