【问题标题】:Rails 4 : basic use of Merit gem with DeviseRails 4:Merit gem 与 Devise 的基本使用
【发布时间】:2014-03-04 16:25:35
【问题描述】:

使用 Merit Gem,我想为我的应用的前 100 位用户创建一个先锋徽章。

merit.rb 中的代码

Merit::Badge.create!(
  id: 1,
  name: 'Pioneer',
  description: "Belongs to the 100 first users of the site",
  image: '/images/pioneer.png'
)

badges_rules.rb 中的代码考虑到我正在使用设计进行身份验证。所以我关注了this how to。

grant_on 'users/registrations#create', badge: 'Pioneer', model_name: 'User' do |user|
  user.id < 101
end

它不会创建任何徽章。有趣的是,另一个徽章工作得很好:

grant_on 'users/registrations#create', badge: 'Inscription', model_name: 'User'

Devise 似乎在搞乱用户对象。我确实覆盖了注册控制器,就像 Howto 说的那样。当我以简单的方式调用这个控制器时,就像这个“铭文”徽章一样,一切都很好。

但是当我需要对用户 ID 设置条件时,什么也没有发生。

有关信息,这是来自用户显示视图的代码,其中显示了徽章(这是有效的)。

 <% @user.badges.first(5).each do |b| %>
   <%= image_tag(b.image) %>
   <%= b.name %>
 <%end%>

【问题讨论】:

    标签: badge merit-gem


    【解决方案1】:

    将model_name: 'User' 添加到您的规则中。当控制器名称未以对象命名时会发生这种情况(注册!= 用户)。

    【讨论】:

    • 感谢您的回答。但是我的用户仍然没有徽章 :( 我查看了您的 demo app 并尝试制作一个自动徽章:grant_on 'registrations#create', badge: 'just-registered', model_name: 'User', to: :user do true end。它看起来很简单,但它不起作用,我在某个地方遗漏了一些东西。
    • 我仍在寻找最简单的徽章,我目前正在尝试这个:grant_on 'users#update', badge: 'profil_edite', to: :user 所以,我得到了undefined method _sash' for true:TrueClass 这条有趣的日志行:[merit] NoMethodError on User#user (called from Merit::TargetFinder#other_target)。我想我已经接近了。
    • 我做到了。我在您的“如何使用 Devise 授予用户注册徽章”中发现了一个错误。关于第 2 点,当你写 grant_on 'registrations#create' 实际上你的意思是 grant_on 'users/registrations#create'
    • 另外,我认为您没有提到创建徽章部分中的 :image 字段
    • 对 cme​​ts 泛滥感到抱歉。由于先锋徽章还没有工作,我正在更新整个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-05
    • 1970-01-01
    • 2014-05-29
    • 1970-01-01
    • 1970-01-01
    • 2013-04-18
    • 1970-01-01
    相关资源
    最近更新 更多