【问题标题】:Rails, Why a ActiveRecord Query works in a controller but not a Helper?Rails,为什么 ActiveRecord 查询在控制器中有效,但在 Helper 中无效?
【发布时间】:2010-09-18 02:22:55
【问题描述】:

我有以下 Rails 3 行

在 project.rb 模型中效果很好:

permissions.find_by_project_id(1).role.name

但是在 projects_helper 中会出错“nil:NilClass 的未定义方法 `role'”:

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

这是为什么呢?

我真正想要的是:

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

但是那个错误:“未定义的方法 `permission' for #”

你能帮我理解 ActiveRecord 允许我构建这些查询吗?

谢谢

添加信息:

permission.rb

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

项目.rb

class Project < ActiveRecord::Base

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

end

角色.rb

class Role < ActiveRecord::Base
    has_many :permissions
end

用户.rb

class User < ActiveRecord::Base

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

【问题讨论】:

  • ?这也是一个助手,我不确定是不是这个问题

标签: ruby-on-rails activerecord ruby-on-rails-3


【解决方案1】:

似乎没有为给定项目设置role。您可以通过以下方式解决它:

current_user.permissions.find_by_project_id(project_id).role.try(:name).nil?

【讨论】:

  • 我仍然得到:undefined method `permission' for 即使我有permission.rb... class Permission
  • 谢谢,但 Captaintokyo 上面指出的问题似乎更大。
【解决方案2】:

一定有更优雅的方式来写这个,所以请随时提出改进建议。关键是你必须先检查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

【讨论】:

  • 嘿,我刚刚发现了错误。它应该是 permissions 而不是 permission。我更新了答案。
  • 您是否按照我上面的建议尝试过 KandadaBoggu 的建议?
  • 好的,project_id 传递给函数的是什么?那projectpermissions吗??
  • 嗯,我认为问题在于current_user 没有permissions 的项目。然后,当您执行current_users.permissions.find_by_project_id() 时,它将返回nil。首先,您必须检查current_users.permissions.find_by_project_id() 是否不为空,然后您可以执行其余代码。我会再更新一次我的答案,然后我去慢跑;-)
  • 我只是在这里猜测,但你不是故意的:if !project.nil? &amp;&amp; !project.role.nil?
猜你喜欢
  • 2021-12-15
  • 1970-01-01
  • 2012-07-27
  • 1970-01-01
  • 2012-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-10
相关资源
最近更新 更多