在Rails重命名列之后的PG :: UndefinedColumn

时间:2015-05-14 19:25:23

标签: ruby-on-rails postgresql

                    string url = "http://your.sharepoint.site";
                    client = new HttpClient(new HttpClientHandler() { UseDefaultCredentials = true }); 
                    client.BaseAddress = new System.Uri(url);
                    client.DefaultRequestHeaders.Clear();
                    client.DefaultRequestHeaders.Add("Accept", "application/json;odata=verbose");
                    client.DefaultRequestHeaders.Add("X-RequestDigest", digest);
                    client.DefaultRequestHeaders.Add("X-HTTP-Method", "POST");
                    client.DefaultRequestHeaders.Add("binaryStringRequestBody", "true");

                    ByteArrayContent file = new ByteArrayContent(fileBytes);
                    HttpResponseMessage response = await client.PostAsync(String.Concat("_api/web/lists/getByTitle('Images')/RootFolder/Files/add(url='", filename, ".jpg',overwrite='true')?$expand=ListItemAllFields"), file);
                    response.EnsureSuccessStatusCode();

                    if (response.IsSuccessStatusCode)
                    {}

更改在rails中运行名称更改后,我收到上述错误。

PG::UndefinedColumn at /books/17
ERROR:  column "books_count" does not exist at character 45
STATEMENT:  UPDATE "users" SET "books_count" = COALESCE("books_count", 0) - 1 WHERE "users"."id" = $1

我在尝试删除图书时首先注意到了这个问题。否则,一切正常。 Postgresql中是否有一个列我必须更改?或者我应该还原名称更改?

我已经重新启动了服务器。

编辑:当前架构

def change
    rename_column :users, :books_count, :books_shared
  end

books_shared WAS books_count。没有其他books_count实例

协会

create_table "users", force: :cascade do |t|
    t.string   "email",                  default: "", null: false
    t.string   "encrypted_password",     default: "", null: false
    t.string   "reset_password_token"
    t.datetime "reset_password_sent_at"
    t.datetime "remember_created_at"
    t.integer  "sign_in_count",          default: 0,  null: false
    t.datetime "current_sign_in_at"
    t.datetime "last_sign_in_at"
    t.inet     "current_sign_in_ip"
    t.inet     "last_sign_in_ip"
    t.datetime "created_at"
    t.datetime "updated_at"
    t.string   "name"
    t.integer  "books_shared",           default: 0
    t.integer  "books_read",             default: 0
  end

1 个答案:

答案 0 :(得分:0)

默认情况下,Rails会查找复数关联模型,后跟_count,在您的情况下为books_count

在此处查看belongs_to的文档并查找counter_cache

http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html#method-i-belongs_to

您可以在Book类中为counter_cache指定自定义列名,如下所示:

belongs_to :user, counter_cache: :books_shared