Rails c sql命令是回滚而不是更新

时间:2016-03-27 00:17:34

标签: sql ruby-on-rails ruby

  1. 所以我试图运行这个的轨道c:

    Borrower.update(1, raised: 0)
    

    和此:

    Borrower Load (0.3ms)  SELECT  "borrowers".* FROM "borrowers" WHERE "borrowers"."id" = $1 LIMIT 1  [["id", 1]]
    
    (0.2ms)  BEGIN
    Borrower Exists (0.5ms)  SELECT  1 AS one FROM "borrowers" WHERE (LOWER("borrowers"."email") = LOWER('j@kay.com') AND "borrowers"."id" != 1) LIMIT 1
    
    (0.2ms)  ROLLBACK
    
    "table with raised = 0"
    1 row in set
    
  2. 我得到了回滚:

    class Borrower < ActiveRecord::Base
    has_many :lenders
    has_many :histories, dependent: :destroy
    has_many :borrowed_from, through: :histories, source: :lender
    EMAIL_REGEX = /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]+)\z/i
    validates :first_name, :last_name, :email, :purpose, :description, :money, presence: true
    validates :email, uniqueness: {case_sensitive: false}, format: {with: EMAIL_REGEX}
    
    has_secure_password
    end
    
  3. 这是我的“借款人”模型:

    create_table "borrowers", force: :cascade do |t|
    
    t.string   "first_name"
    t.string   "last_name"
    t.string   "email"
    t.string   "password_digest"
    t.integer  "money"
    t.string   "purpose"
    t.text     "description"
    t.integer  "raised"
    t.datetime "created_at",      null: false
    t.datetime "updated_at",      null: false
    end
    
  4. 和我的架构:

    int * objects = (int *)malloc(amount_of_objects * 7 * sizeof(int));
    if (x_vector != 0 || y_vector != 0 || z_vector != 0) {
    for (int j = 0; j < amount_of_objects; ++j) {
        *(objects + (j * 4)) = j;
        *(objects + (j * 4 + 1)) = x_start;
        *(objects + (j * 4 + 2)) = y_start;
        *(objects + (j * 4 + 3)) = z_start;
        *(objects + (j * 4 + 4)) = x_vector;
        *(objects + (j * 4 + 5)) = y_vector;
        *(objects + (j * 4 + 6)) = z_vector;
    }`
    
  5. 如何永久更新“凸起”?

1 个答案:

答案 0 :(得分:2)

验证失败,尝试在您的控制台上打印验证错误:

borrower = Borrower.update(1, raised: 0)
puts borrower.errors

如果您想明确跳过验证,另一种解决方案可能是update_attribute

Borrower.find(1).update_attribute(:raised, 0)

如果您还想跳过回调并避免触及updated_at,那么update_column

Borrower.find(1).update_column(:raised, 0)

如果raised是一种布尔属性,您也可以选择toggle!

Borrower.find(1).toggle!(:raised)