Rails, почему ActiveRecord Query работает в контроллере, а не в помощнике? - PullRequest
1 голос
/ 18 сентября 2010

У меня есть следующая строка Rails 3

В модели project.rb это прекрасно работает:

permissions.find_by_project_id(1).role.name

Однако в projects_helper выдает ошибку «неопределенный метод` role 'для nil: NilClass ":

if Permission.find_by_project_id(project_id).role.name.nil?
.
.

Почему это?

Что я действительно хочу, это:

current_user.permission.find_by_project_id(project_id).role.name.nil?

Но это ошибки: "неопределенный метод` разрешение 'для # "

Можете ли вы помочь мне понять ActiveRecord, позволяющий мне создавать эти запросы?

Спасибо

добавлена ​​информация:

permission.rb

class Permission < ActiveRecord::Base
    belongs_to :user 
    belongs_to :project 
    belongs_to :role 
end

project.rb

class Project < ActiveRecord::Base

    has_many :permissions
    has_many :users, :through => :permissions

end

role.rb

class Role < ActiveRecord::Base
    has_many :permissions
end

user.rb

class User < ActiveRecord::Base

    belongs_to :instance
    has_many :books
    has_many :permissions
    has_many :projects, :through => :permissions

Ответы [ 2 ]

2 голосов
/ 18 сентября 2010

Похоже, role не установлено для данного проекта. Вы можете обойти это:

current_user.permissions.find_by_project_id(project_id).role.try(:name).nil?
1 голос
/ 18 сентября 2010

Должен быть более элегантный способ написать это, так что не стесняйтесь предлагать улучшения. Дело в том, что вы должны сначала проверить, что project не nil, прежде чем вы сможете что-то сделать с project.role.

def team_member?(project_id, current_user)
  project = current_user.permissions.find_by_project_id(project_id)

  if !project.nil? && !project.role.nil?
    # your code
  else
    # return false?
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...