【问题标题】:Ruby on Rails Merit gem with DeviseRuby on Rails Merit gem 与 Devise
【发布时间】:2013-06-30 17:10:56
【问题描述】:

我正在尝试将 Merit gem 与 Devise 一起使用,这样如果用户填写了 Devise 表单中的传记字段,那么他们将获得徽章。

但是,当我使用它时,它说

undefined method `biography' for true:TrueClass

这是给我错误的部分:

/models/merit/badge_rules.rb

grant_on 'registrations#update', badge: 'autobiographer', temporary: true do |user|
  user.biography.present?
end

为什么它认为 user 属于 TrueClass?
/views/devise/registrations/edit.html.erb

<h2>Edit <%= resource_name.to_s.humanize %></h2>
<%= simple_form_for(resource, :as => resource_name, :url => registration_path(resource_name), :html => { :method => :put, :class => 'form-vertical' }) do |f| %>
  <%= f.error_notification %>
  <%= display_base_errors resource %>
  <%= f.input :first_name, :required => true, :autofocus => true %>
  <%= f.input :last_name, :required => true %>
  <%= f.input :username, :required => true %>
  <%= f.input :email, :required => true %>
  <%= f.input :biography %>
  <%= f.input :password, :autocomplete => "off", :hint => "leave it blank if you don't want to change it", :required => false %>
  <%= f.input :password_confirmation, :required => false %>
  <%= f.input :current_password, :hint => "we need your current password to confirm your changes", :required => true %>
  <%= f.button :submit, 'Update', :class => 'btn-primary' %>
<% end %>
<h3>Cancel my account</h3>
<p>Unhappy? <%= link_to "Cancel my account", registration_path(resource_name), :data => { :confirm => "Are you sure?" }, :method => :delete %>.</p>
<%= link_to "Back", :back %>

merit.rb

# Create application badges (uses https://github.com/norman/ambry)
badges = [
{id: 1,name: 'just-registered',image:"/images/registered.png",custom_fields:"Registered for an account"},
{id: 2,name: 'verified-user',image:"/images/verified-user.png",custom_fields:"Verified as a valid user" },
{id: 3,name: 'first-image',image:"/images/registered.png",custom_fields:"Uploaded first profile picture"},
{id: 4,name: 'first_vote',image:"/images/vote.png",custom_fields:"Voted for your first professor"},
{id: 5,name: 'autobiographer',image:"/images/biography.png",custom_fields:"Wrote a biography about yourself."}
]
badges.each do |badge|
  Merit::Badge.create!(badge)
end

【问题讨论】:

  • 不知道为什么,但不应该在初始化程序中创建徽章吗? docs: "在config/initializers/merit.rb 中创建徽章"
  • @flynfish 抱歉,打错了。我实际上已经将该代码放在了merit.rb 文件中,我只是在问题中写错了。我更新了帖子。

标签: ruby-on-rails ruby devise merit-gem


【解决方案1】:

优点需要设计控制器不实例化的实例变量。您需要这样做,如:https://github.com/merit-gem/merit/wiki/How-to-grant-badges-on-user-using-Devise

中所述

【讨论】:

    【解决方案2】:

    我知道 Devise 非常适合通过几次按键设置用户帐户管理,但它最终很难与其他 gem 和功能集成。根据我的经验,在开始时自己设置用户身份验证是值得的,就像按照 Michael Hartl 的示例 http://ruby.railstutorial.org/ruby-on-rails-tutorial-book 一样。将 Merit 与像 User 这样的 Devise 生成的模型一起使用确实存在问题,但在使用 Hartl 之后没有。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-03
      • 1970-01-01
      • 1970-01-01
      • 2015-02-04
      • 1970-01-01
      相关资源
      最近更新 更多