Я использую Rails 4 для создания веб-приложения.
Я пытаюсь использовать CanCanCan для определения способностей для различных ролей.
У меня есть модель пользователя и модель профиля. У каждого пользователя может быть много профилей. У каждого профиля может быть своя роль.
В моем Profile.rb я определил свои роли (используя гем Role Model) следующим образом:
include RoleModel
roles :admin, :manager, # coalfacer
:student, :educator, :researcher, :ktp, :faculty_manager, :ip_asset_manager, # for universities
:sponsor, # for industry
:project_manager, :representative, # for both uni and industry
:grantor, :investor, :adviser, :innovation_consultant, :panel_member, # external
:participant, :guest # public
roles_attribute :roles_mask
В моем Ability.rb я пытаюсь определить первую способность следующим образом:
user ||= User.new # guest user (not logged in)
#users who are not signed in can read publicly available projects
can :read, Project, {:active => true, :closed => false, && Project.sweep.disclosure.allusers: true}
В моей таблице Projects у меня есть логический атрибут с именем :closed.
У меня также есть модели для Sweep и Disclosure. Ассоциации таковы:
Project.rb:
has_one :sweep
accepts_nested_attributes_for :sweep
Sweep. rb
belongs_to :project
has_one :disclosure
accepts_nested_attributes_for :disclosure
Disclosure.rb
belongs_to :sweep
В моей таблице раскрытий есть логический атрибут :allusers.
Если Projects.closed имеет значение false И project.sweep.disclosure.allusers имеет значение true, то я хочу разрешить гостям читать проект.
Когда я пытаюсь, как я изложил выше, я получаю сообщение об ошибке:
undefined method `profile' for nil:NilClass
<% if @current_user.profile.has_role? :student %>
<%= link_to 'Edit Project', edit_project_path(@project) %> <% end %> </span>
До попытки определения способностей это не вызывало ошибки. Кроме того, несколько проектов, возвращаемых в индексе проектов, являются проектами, которые не соответствуют критериям, указанным в моем файле Ability.rb (например, Disclosure.allusers не имеет значения true).
Может ли кто-нибудь увидеть, что я сделал неправильно в определении этой способности, как указано выше?
Это не та же проблема, которую я изложил в своем связанном вопросе с тем же заголовком.
@current_user
все ещеnil
. - person nayiaw   schedule 31.08.2015