2011-03-03 70 views
1

嗨, 我是新來的Ruby和Rails,我做了一個小的測試例子:爲什麼我可以在參數中使用params [:from]?

/應用/助理/

module HomeHelper 
    def makeach(from, to, by) 
    x = from 
    while x <= to 
     yield x 
     x = x + by 
    end 
    end 
end 

/apps/view/home/new.erb

<form action="create" method="post"> 
    <input type="text" name="from" /> 
    <input type="text" name="to" /> 
    <input type="text" name="by" /> 
    <input type="submit" name="commit" value="Click it" /> 
</form> 

/apps/views/home/create.erb

模塊HomeHelper

<% makeach(params[:from], params[:to], params[:by]) do |x| %> 
<%= x %> 
<% end %> 

/apps/controllers/home_controller.rb

class HomeController < ApplicationController 
    def index 
    end 
    def create 
    end 
    def new 
    end 
end 

後,我發佈形式action new,將create view輸出沒有在瀏覽器 PS:我知道有很多方法來改善我的代碼,但在這裏,我只想知道爲什麼我什麼都沒有。

+0

助手確實可以訪問參數,您是否嘗試將其轉換爲整數? params [:from] .to_i – apneadiving 2011-03-03 09:12:17

+1

嗯,可以肯定的是:通常,在粗糙設計中,沒有創建視圖。根據保存的狀態顯示新的或顯示。你明白了嗎? – apneadiving 2011-03-03 09:13:59

+1

你可以在控制器中顯示你的創建方法嗎? – rubyprince 2011-03-03 11:09:18

回答

3

所以,你缺少的一件事就是REST的基本思想。有關Rails如何處理控制流的詳細說明,請嘗試this answer

但是,基本上,當您在路線中設置resources :home時,它將爲您的七個標準控制器操作(SHOW,INDEX,NEW/CREATE,EDIT/UPDATE,DESTROY)定義seven routes

當您嘗試在瀏覽器中加載頁面時,您發送的是GET請求。 NEW操作接受GET請求。 CREATE操作只接受POST請求(如提交表單)。因此,在將表單發佈到CREATE操作後,如果要顯示訪問者的內容,則需要重定向到接受GET請求的頁面。

或者可能會覆蓋Rails的默認值,以允許CREATE接受GET請求,但我會認爲這是一個壞主意。

也許你需要做的最簡單的事情是確保你創建動作在你的控制器看起來是這樣的:

def create 
    (... do whatever processing of the params you want to do here ...) 
    redirect_to home_path # OR whatever other path you want. 
end 

在一個控制器動作,您可以渲染(默認)或重定向結束。重定向只是跳轉到另一個控制器操作並執行該操作中的任何操作。渲染通常顯示與控制器操作同名的視圖,但渲染有很多選項see here

要訪問視圖中的參數,最好的辦法是將它們分配給一個實例變量。 IE:

def ... # any action that accepts GET requests 
    @value = params[:value] 
end 

但是,params在重定向後不會持續。因此,如果您POST一個動作並重定向到另一個動作(正常慣例),則需要將參數保存到數據庫,或將它們保存到session

在你的情況下,你應該將它們存儲在會話中,因爲它們似乎沒有附加到模型上。

然後在下一個控制器動作中,您將檢查會話中是否存在某些變量,並將它們放入實例變量中以在視圖中使用。

IE:

@value = session[:value] if session[:value] 

我知道這是一個大量吸納,但我希望這可以幫助你換你的頭腦周圍發生了什麼事情。最後一個建議是購買並閱讀Beginning Rails 3。它簡短而又甜蜜,只是需要花上一個週末才能完成,最後你會真正理解鐵軌運作的全貌,你的生產力和未來的學習將會翻兩番。

祝你好運!

相關問題