2016-09-22 2 views
0

私はモデルのユーザーを持っていて、name:string、email:stringという属性を持っているとします。オンラインまたはコンソールでユーザーを作成してそのユーザーを保存すると、ユーザーにはIDが与えられます。しかし、私が(Rを介して)ユーザーデータを自分のposgresqlデータベースに送ると、ユーザーは属性を持ちますがユーザーIDは持ちません。モデルにデータをインポートしているときに、ユーザーがIDを持つようにするためには何が必要ですか?id = nil、RからpostgreSQLへのデータ送信時

のRailsコンソールのユーザーIDを確認

2.2.1 :002 > User.first.id 
    User Load (12.6ms) SELECT "Users".* FROM "Users" LIMIT 1 
=> nil 

R輸入コード

require("RPostgreSQL") 

    pw <- { 
    "password" 
    } 

    con <- dbConnect(drv, dbname = "my_database_production", 
        host = "localhost", port = 5432, 
        user = "user_name", password = pw) 

    dbExistsTable(con, "users") 

    dbWriteTable(con, "users", 
       value = new_data, overwrite=TRUE) 

    dbDisconnect(con) 
    rm(pw) 
+0

自動的に追加された行番号について話していますか? –

+0

は行番号属性idsですか?私はそうは思わない。各新規モデルインスタンスに属性idが割り当てられます。 – BlueDevilPride

+0

「モデルインスタンス」と言いましたか?各ステップ(R、psql、およびRailsのようなもの)にいくつかのサンプルデータを含めることができます。この質問は非常に不明です。 –

答えて

1

必ず私はこの権利を持って作る:あなたは、ユーザーを追加すると、アクションのリターンを持っていますおそらく後で関数内でそれらを参照する何らかの方法を持っているので、新しいユーザーID

私はすでにRailsの中でこれを行うための組み込み関数があるのか​​どうか知らないが、Rのアプリは、新規ユーザのユーザIDを知っておく必要がある場合、あなたはこれを行うことができ、次のいずれか

1 )2ステップ:挿入、次にselect id from Users where [blah]dbWriteTable()を使用すると、これはあまりおこなわれません。新しいテーブルを書き込むときに既存のユーザーテーブルが上書きされます。idserialタイプであるか、データベースによって割り当てられたサーバー側シーケンスからのものとみなしています。

2)RETURNING句の挿入クエリを使用します。警告:私はRailsのエキスパートではないので、他にも必要なテーブルマジックがあるかもしれません。

require(DBI) # for dbQuoteString() 

users <- data.frame(stringsAsFactors=FALSE, 
    name=c("Alice", "Bob", "Claire"), 
    email=c("[email protected]", "[email protected]", "[email protected]") 
) 

# protect against names that have quotes, like O'Toole. 
# and protect against SQL injection at the same time. 
# If we had any integer or float values, protect against 
# sqli like this: 
# num_val <- as.numeric(num_val) 
# int_val <- as.integer(int_val) 
users$name <- dbQuoteString(ANSI(), users$name) 
users$email <- dbQuoteString(ANSI(), users$email) 

qry <- "INSERT INTO Users (name, email) VALUES " 

# now build the "values" string. 
vals <- apply(users,1,paste,collapse=",") 
vals <- paste("(",vals,")", collapse=", ") 

qry <- paste(qry, vals) 

# in this example, we return all the columns we've inserted, 
# plus the user id. 
qry <- paste(qry, "RETURNING name, email, id") 

res <- dbGetQuery(con, qry) 
関連する問題