[英]Error while using gem Merit on Ruby on Rails
我正在Ruby on Rails版本5.1.4上使用gem merit 3.0.1创建成就系统。 但是问题出在我尝试在POST方法或Rails控制台上创建User时。 问题ActiveRecord::RecordInvalid: Validation failed: Sash must exist
。 我已经点击了此链接https://github.com/merit-gem/merit/issues/265 ,它说我必须将腰带设为可选,然后由另一个github用户拉出自定义功绩宝石,并且进展顺利,直到当我看到每个用户的sash_id为nil
,如果sash_id为nil
,则意味着徽章无法与该用户建立联系。 问题是什么? 我已经尝试了github内的所有步骤,但仍然毫无头绪。 每次注册用户时,我是否手动创建sash_id? 谢谢。
这是我的用户模型
class User < ApplicationRecord
include Merit
has_merit
has_many :activities, dependent: :destroy
has_many :locations, as: :locationable
has_many :active_relationships, class_name: "Relationship", foreign_key: "follower_id", dependent: :destroy
has_many :following, through: :active_relationships, source: :followed
has_many :passive_relationships, class_name: "Relationship", foreign_key: "followed_id", dependent: :destroy
has_many :followers, through: :passive_relationships, source: :follower
def follow(other_user)
following << other_user
end
def unfollow(other_user)
following.delete(other_user)
end
def following?(other_user)
following.include?(other_user)
end
class << self
def find_for_verfied_token_response(auth,provider,access_token)
user = find_or_create_by(uid: auth['id'])
if provider == "facebook"
user.profile_picture = auth['picture']['data']['url']
elsif provider == "google_oauth2"
user.profile_picture = auth['picture']
end
user.email = auth['email']
user.full_name = auth['name']
user.gender = auth['gender']
user.provider = provider
user.access_token = access_token
puts(user)
user.save!
user
end
def save_api_key(email,uid,api_key)
user = User.where(email: email, id: uid).first
user.api_key = api_key
user.save!
user
end
end
end
我只是遇到了同样的问题。 请使用这个分支
gem 'merit', github: 'tamycova/merit', branch: 'f657596409d98fc7c8e3274b213b86cc47d87495'
而且我认为它将解决此问题。 顺便说一句,您正在使用哪个版本的滑轨?
我确实做了一个小修正,但是需要大量的修正。 就目前而言,问题在于“归属于”关系。 优点与Rails 5并不完全兼容。
# Insert into model app/models/user.rb
before_validation :set_sash
def set_sash
sash = ActiveRecord::Base.connection.execute(query_sash)
self.sash_id = sash.first["id"]
end
def query_sash
'INSERT INTO sashes (created_at, updated_at) VALUES (CURRENT_TIMESTAMP, CURRENT_TIMESTAMP);
select id from sashes order by created_at desc limit 1;'
end
不要恨我的代码,我很快就解决了这一点而无需考虑。 也许我们有比这更好的选择,如果您知道其中之一,请发表评论。
谢谢。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.