小编ast*_*enb的帖子

如何正确定义gorm db接口?

我正在尝试对使用类型的方法进行单元测试,*gorm.DB并且很好奇如何正确定义一个接口,使我能够在不命中数据库的情况下进行测试。

这是我想要做的一个小例子:

type DBProxy interface {
    Create(values interface{}) *DBProxy
    Update(values interface{}) *DBProxy
}

type TestDB struct{}

func (t *TestDB) Create(values interface{}) *TestDB {
    return t
}

func (t *TestDB) Update(values interface{}) *TestDB {
    return t
}

func Connect() DBProxy {
    return &TestDB{}
}
Run Code Online (Sandbox Code Playgroud)

结果是:

cannot use TestDB literal (type *TestDB) as type DBProxy in return argument:
    *TestDB does not implement DBProxy (wrong type for Create method)
            have Create(interface {}) *TestDB
            want Create(interface {}) *DBProxy
Run Code Online (Sandbox Code Playgroud)

任何帮助,将不胜感激!


更新

这是我的实际应用程序代码:

package …
Run Code Online (Sandbox Code Playgroud)

go go-gorm

5
推荐指数
1
解决办法
1267
查看次数

Rails 4.1计数器缓存未更新

尽管据我所知我已正确完成了所有操作,但此计数器缓存似乎无法正常工作。

user.rb:

class User < ActiveRecord::Base
  has_many :search_stats, counter_cache: true
end
Run Code Online (Sandbox Code Playgroud)

移民:

class AddSearchStatsCounterCacheToUsers < ActiveRecord::Migration
  def up
    add_column :users, :search_stats_count, :integer, default: 0, null: false

    User.reset_column_information
    User.find_each do |u|
      u.update_attribute(:search_stats_count, u.search_stats.count)
    end
  end

  def down
    remove_column :users, :search_stats_count
  end
end
Run Code Online (Sandbox Code Playgroud)

为什么不更新计数器?

user = User.find( user_id )
user.search_stats.create!( search_params: search_params.to_json )
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails counter-cache ruby-on-rails-4

3
推荐指数
1
解决办法
919
查看次数