2013-05-03 67 views
0

要學習Rails,我正在編寫一個不使用數據庫的簡單留言簿應用程序。 無論如何,這是我的看法是什麼樣子:字符串將在Rails中工作但不是符號

的意見/ guest_book_pages/home.html.erb

<h1>Guest Book</h1> 

<%= @userinput %> 

<%= form_for(:guestbook) do |f| %> 
    <%= f.label :input %> 
    <%= f.text_field :input %> 

    <%= f.submit "Sign" %> 
<% end %> 

而且控制器看起來是這樣的:

控制器/ guest_book_pages_controller.rb

class StaticPagesController < ApplicationController 
    def home 
    @userinput = params[:guestbook]["input"] 
    end 
end 

每當我將「輸入」更改爲符號:輸入時,應用程序會中斷並給出警告,說明:undefined method [[]'for無:NilClass

這是什麼原因?爲什麼我不能使用符號?

更新:現在它甚至不會使用字符串。到底是怎麼回事?

更新#2:它適用於符號和字符串。唯一的問題是它不會第一次加載。如果我可以加載頁面,那麼兩者都可以工作。我怎樣才能加載頁面?

回答

0

動作用來處理一些東西,並渲染視圖。 當你在家中時,家庭行爲已被調用,並且現在沒有任何參數。 爲你的代碼,主動作應該是空的,它只是呈現home_page。 你的句柄代碼應該移動到像sign_in這樣的動作,處理表單文章,你可以得到參數。

0

第一次加載頁面時,params var沒有設置。只有當您提交表單背部有PARAMS

嘗試

@userinput = params[:guestbook]["input"] || '' 

這將@userinput初始化爲空字符串,如果沒有找到PARAMS

編輯:

這將檢查參數是否具有關鍵留言簿,然後將實例var userinput設置爲空字符串或如果存在則將[guestbook] [input]的值設置爲。

如果一切都失敗了,實例var將被初始化爲一個空字符串以防止視圖中的錯誤。

if params.has_key?(:guestbook) 
    @userinput = params[:guestbook]["input"] || '' 
else 
    @userinput = '' 
end 
+0

我試過了,但問題仍然存在。我認爲這樣做的行爲:params [:留言簿] [「輸入」]正在破壞。我想知道是否有任何方法檢查參數是否沒有設置而沒有檢查參數本身? – learningrails123 2013-05-03 14:46:05

+0

你有沒有試過'if params.has_key?(:guestbook)' – fullybaked 2013-05-03 14:48:19

+0

實際上,我需要檢查:input是否有任何值,當我這樣做時,它會再次破壞。 – learningrails123 2013-05-03 15:03:57

相關問題