2013-06-30 6 views
1

J'essaie d'utiliser la gemme Merit avec Devise, de telle sorte que si l'utilisateur remplit le champ Biographie dans le formulaire Devise, alors il recevra un badge.Ruby on Rails Merit gem avec Devise

Cependant, quand je l'utilise, il dit

undefined method `biography' for true:TrueClass 

est ici la partie qui me donne l'erreur:

/models/merit/badge_rules.rb

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

Pourquoi est-ce il pense que utilisateur est de la 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 

+0

Vous ne savez pas pourquoi, mais les badges ne devraient-ils pas être créés dans l'initalizer? docs: "Créer des badges dans' config/initializers/merit.rb' " – flynfish

+0

@flynfish Désolé à ce sujet, fautes de frappe. J'avais effectivement mis ce code dans le fichier merit.rb, je l'ai juste mal écrit dans la question. J'ai mis à jour le post. –

Répondre

0

Je sais que Devise est idéal pour configurer la gestion des comptes utilisateur avec seulement quelques touches, mais il finit par être difficile à intégrer avec d'autres gemmes et fonctionnalités. D'après mon expérience, il vaut mieux prendre le temps de configurer vous-même l'authentification de l'utilisateur, comme dans l'exemple de Michael Hartl http://ruby.railstutorial.org/ruby-on-rails-tutorial-book. Il y avait des problèmes précis en utilisant Merit avec des modèles générés par Devise comme User, mais aucun après avoir utilisé Hartl.