繁体   English   中英

在Ruby on Rails上使用gem Merit时出错

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM