2017-03-27 120 views
-1

我測試下面爲什麼如果條件不工作

params[:code] = if false 
           'N' 
           else 
           'Y' 
           end 

返回N表示如果param小碼[:代碼]通過爲真或假的也rubucop顯示錯誤文字「假」的情況出現。任何想法爲什麼?

+1

的可能的複製[什麼是「字符串字面條件」是什麼意思?(http://stackoverflow.com/questions/21556673/what-does-string -literal-in-condition-mean) –

回答

1

您是否嘗試過這個...

params[:code] ? 'Y' : 'N' 

或者

params[:code] = params[:code] ? 'Y' : 'N' 
# If you are trying to also re-assign params[:code]. 
+1

我不相信閱讀這個問題會讓任何事情變得明顯。 – SoEzPz

+0

我傳遞的代碼值爲true和false,並基於更新參數代碼值爲Y或N. – User7354632781

+0

然後我提供的第二個示例是要走的路。 – SoEzPz

2

如果假

params[:code] = if false 
        'N' 
       else 
        'Y' 
       end 

這個代碼僅僅是:

params[:code] = 'Y' 

沒有if,不能不:false是很好,總是false,所以沒有辦法N即可到達。這就是rubocop抱怨的原因。

修改後的代碼

我猜你的意思是寫:

params[:code] = if params[:code] == false 
        'N' 
       else 
        'Y' 
       end 

這不是rubyish可言,但至少它看起來像你的代碼,做你希望它是什麼。

爲了測試它:

params = {code: false} 

params[:code] = if params[:code] == false 
        'N' 
       else 
        'Y' 
       end 
p params 
# {:code=>"N"} 

警告!

如果您params值都是字符串(因爲他們經常是),你必須要測試的字符串:

params[:code] = if params[:code] == "false" 
         'N' 
        else 
         'Y' 
        end 

隨着三元:

params[:code] = params[:code] == "false" ? 'N' : 'Y' 

或哈希:

params[:code] = {'true' => 'Y', 'false' => 'N'}[params[:code]] 

如果您有模糊輸入(例如true"true""True""yes"),你可以使用Rails built-in methods to convert to boolean

code = ActiveRecord::Type::Boolean.new.type_cast_from_database(params[:code]) # For Rails 4.2 
params[:code] = code ? 'Y' : 'N' 
+0

謝謝。我正在嘗試你的修改後的代碼,但對於輸入值false其分配參數[:code] = Y.有沒有其他方法?我正在使用郵遞員測試http:// localhost:3001/D/DB_ID/users/user_id/test?code = false – User7354632781

+0

@ User7354632781:您的本地主機不是我的本地主機,我無法訪問您的服務器。另外,你的輸入值是否爲''false'(一個字符串)或'false'(一個布爾值)? –

+0

true或false是布爾值 – User7354632781