2016-04-09 12 views
0

私のコントローラでは、一致する整数値を1つ抜き取り、別のテーブルにその値を持つレコードを作成する必要があります。アクションでは、それは次のようになります。私はfirst変数が定義可能であるコンソールでテストしている.Createメソッドは、Rails 4の整数を認識できない場合にnil値を追加します。

if Participation.where(ranking: "1") 
     first = PointsAllocation.where(game_id: params[:game_id]).where(place: "1").pluck(:points) 
     Stack.create(game_id: params[:game_id], user_id: current_user.id, chips: first) 
    else 

    end 

SELECT "points_allocations"."points" FROM "points_allocations" WHERE "points_allocations"."game_id" = 1 AND "points_allocations"."place" = 1 => [10]

は、[OK]を、ので、正しくPointsのための整数値のように見えるもの摘採されています。私はPointsAllocation.where(game_id: "1").where(place: "1").pluck(:points)を実行した場合、それが返されます。私はこの点の値を使用して、StackテーブルのChips列に送信します。私はこれを実行すると、それはそうのように、firstが定義されていてもnilレコードを追加します:

トラブルシューティングで<Stack id: 1, game_id: 1, user_id: 1, chips: nil>

は、私は多分ここに問題があると思ったこと、それは、整数のように見える(とChipsにもかかわらず、 、私は追加する必要がありますt.integer属性です)、多分それは誤って文字列か何かから抜け出す。だから、これを整数にマップして、安全のためにmap(&:to_i)を追加してみましょう。それが今で返すよう

私は、それは奇妙取得していること:

<Stack id: 9, game_id: 1, user_id: 1, chips: 0>

を私は整数に変換するときだから、それは0から10に変更し、テーブルに追加します。

どこが間違っていますか?

答えて

2

あなたはそれではなく、1つのオブジェクトのみをロードActiveRecord::Association解決することがあります。

Stack.create(chips: 10) 
#=> <Stack id: ..., chips: 10> 
Stack.create(chips: [10]) 
#=> <Stack id: ..., chips: nil> 
Stack.create(chips: "10") 
#=> <Stack id: ..., chips: 10> 
Stack.create(chips: "first") 
#=> <Stack id: ..., chips: 0> 
+0

うんちょうどそれをキャッチし、:彼らは列の型と異なる入力すると

first = PointsAllocation.where(game_id: params[:game_id]).where(place: "1").first points = first.points Stack.create(game_id: params[:game_id], user_id: current_user.id, chips: points) 

問題は、ARが正しくない値を変換しようとしていることです。別の方法:ドキュメントを読んだ後、 'pluck'は配列がただ一つの値であっても配列を返します。 '.first'を使用することで、整数に変換され、createメソッドで正常に使用できます。ありがとう! – darkginger

関連する問題