2011-01-18 42 views
3

我有以下的在我的控制器:Rails的 - 使用真假

if params[:archive] == 'true' 
    @archived_new_status = true 
else 
    @archived_new_status = false 
end 

再後來在create.je.erb做:

<% if [email protected]_new_status.nil? %> 
    xxx.myfuncthatNeedsTrueOrFalse(<%[email protected]_new_status%>); 
<% end %> 

,只有當@archived_new_status是真實的作品,當它是假的,似乎沒有被設置爲假。當我在@archived_new_status上做一個Rails.logger.info作爲false時,它不會輸出任何內容,如果我檢查它,我會得到false。

有什麼想法?

+1

編輯以滿足我的強迫症: – meagar

回答

1

嘗試:

<% if [email protected]_new_status.blank? %> 
    xxx.myfuncthatNeedsTrueOrFalse(<%[email protected]_new_status%>); 
<% end %> 
+0

感謝但給了rails.logger輸出上面提到的false是不會輸出空白的。意思是IF如果通過它上面將是空白的沒有? – AnApprentice

+4

如果你打算否定對'blank?'的調用,你應該使用'present?'來代替。 – ryeguy

+0

啊拍攝結果是HTML不提交被禁用的輸入元素。這是問題。 dang – AnApprentice

0

你可以這樣做:

if params[:archive] && !params[:archive].blank? 
    @archived_new_status = params[:archive] 
end 

但是你可以把它放到驗證模型或提高應用程序異常。請參閱Rails form validation

0

我是否正確理解變量@archived_new_status未設置?雖然,您顯示的代碼始終將其設置爲truefalse

我會改寫如下:

@archived_new_status = if params[:archive] == 'true' 
    true 
else 
    false 
end 

與上面相同的代碼,只有些簡單(也許更清晰)。然後你可以將它寫得更短:

@archived_new_status = params[:archive] == 'true' ? true : false 

(實際上,這與您向我們展示的內容完全相同)。 在您看來,您可以確保始終設置@archived_new_status!從您向我們展示的代碼中,沒有其他方法。它可以是truefalse。所以,你的看法變成:?

xxx.myfuncthatNeedsTrueOrFalse(<%= @archived_new_status.to_s %>); 

(我想你是調用一些JavaScript函數在這裏,用真或假的通緝參數確定該值被正確轉換爲字符串 - >我添加.to_s爲清楚起見)

從你告訴我們,沒有什麼可能是錯誤的,所以要包:

  • 可以確保@archived_new_status設置正確,如果沒有,顯示完整的代碼示例
  • 在你正在渲染的視圖中,你是否正確地將值轉換爲字符串?你能解釋你在做什麼嗎?
3

控制器中的代碼可以寫成:

@archive_new_status = (params[:archive] == 'true') 

查看:我不明白你爲什麼檢查變量是零; @archive_new_status是真或假,所以只需調用JS代碼(使用to_json對您有任何參數):

xxx.myfuncthatNeedsTrueOrFalse(<%= @archived_new_status.to_json %>); 
0

Rails.logger.info false正確輸出什麼(見my answer to your other question),所以我認爲這隱藏無論你真正的問題是。

ERB <%= something %>隱式調用something.to_s,但false.to_s == 'false',所以你看到的最有可能的解釋是,@archived_new_status不知何故沒有得到設定所有,或沒有得到傳遞給視圖模板。

0

試試這個。我正在將它作爲@archived_new_status是布爾(真或假)

params[:archive] ? @archived_new_status : [email protected]_new_status