2016-12-10 9 views
1

Ruby(とRails)の新機能です。ビューファイルからフォームデータを取得してコントローラ内で何かを計算しようとしていますが、メソッドによって返されます。私はそれが私が見落としている非常にシンプルなものだという気持ちがあります。Rubyメソッドが値を返さないようです

これはdef create内にある:

def calcQuadrant 

     important = params[:task][:important] # INT of 0 or 1 
     urgent = params[:task][:urgent] # INT of 0 or 1 

     if important == 1 && urgent == 1 
      return 1 
     elsif important == 1 && urgent == 0 
      return 2 
     elsif important == 0 && urgent == 1 
      return 3 
     elsif important == 0 && urgent == 0 
      return 4 
     end 
    end 

calcQuadrantは、コンソールにしても、私はputimportantまたはurgent、何も返さいないようですし、彼らが値を持っています。私は最終的にcalcQuadrantによって返された値を新しいパラメータに割り当てようとしています:params[:task][:quadrant]

高レベルで、私が本当に理解しようとしているのは、ビューからコントローラに渡されなかったモデルにパラメータを渡すための最良の方法です。コントローラ内のそのパラメータに値を代入するだけです。たとえば、ユーザーに「やるべきこと」と、「重要」および/または「緊急」であるかどうかを尋ねます。彼らの選択に基づいて、私はタスクが入る象限を計算します。 DBの重要性と緊急性を保存するのではなく、四分円を保存したいだけです。

+0

なぜルート経由でマップしないのですか?ポスト:/ todo /:id/important – Roger

答えて

1

おそらくparams[:task][:important]params[:task][:urgent]は整数ではない文字列です。これをチェックして。

私はこれを試しましたが、結果は期待どおり2です。

def calcQuadrant 
    important = 1 
    urgent = 0 

    if important == 1 && urgent == 1 
     1 
    elsif important == 1 && urgent == 0 
     2 
    elsif important == 0 && urgent == 1 
     3 
    elsif important == 0 && urgent == 0 
     4 
    end 
end 
+0

うわー。私が言ったように、シンプルな何かが見落とされていました。ありがとうございました! –

1

あなたのコードは、明らかに他の答えが指摘するようにあなたは、文字列"1"を何とかimportanturgent変数が含まれている場合、例えば、2、または、nilを期待する、または何戻りません。

次の例のように、ブール値であることを変数importanturgentを制約する必要があります

def calcQuadrant 

    important = params[:task][:important].to_i == 1 
    urgent = params[:task][:urgent].to_i == 1 

    if important && urgent 
     1 
    elsif important && !urgent 
     2 
    elsif !important && urgent 
     3 
    elsif !important && !urgent 
     4 
    end 
end 

そして最後に、そう、Rubyで、機能で最後に評価された式は、関数の戻り値になることを覚えておいてくださいをあなたの例では、returnキーワードは必要ありません。

1

params整数値を文字列として受信され、これを行う、助けto_i方法

important = params[:task][:important].to_i 
urgent = params[:task][:urgent].to_i 

希望を使用!あなたの2番目の質問については

def calc_quadrant 
    important = params[:task][:important].to_i 
    urgent = params[:task][:urgent].to_i 

    4 - 2*important - urgent 
end 

:ここ

1

ははるかに短いバージョンです。コントローラはすっきりしていて、モデルは太っていなければなりません。象限論理はモデルの中にあるべきです。

モデルで定義したすべてをデータベースに保存する必要はありません。詳細を知りたい場合は、モデル定義を自由に表示してください。

関連する問題