Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 从模型中的关联模型访问属性_Ruby On Rails_Cancan - Fatal编程技术网

Ruby on rails 从模型中的关联模型访问属性

Ruby on rails 从模型中的关联模型访问属性,ruby-on-rails,cancan,Ruby On Rails,Cancan,我正在尝试将规则应用到一个能力类 我的应用程序中的每个用户(管理员除外,但我们将忽略这一点)都属于另一个模型中定义的实践 出于这样或那样的原因,该机构可能希望暂停访问 我想在我的能力模型中说 if user.practice.suspended? can :read, Client, :practice_id => user.practice_id else can :manage, CLient, :practice_id => user.practice_id etc...

我正在尝试将规则应用到一个能力类

我的应用程序中的每个用户(管理员除外,但我们将忽略这一点)都属于另一个模型中定义的实践

出于这样或那样的原因,该机构可能希望暂停访问

我想在我的能力模型中说

if user.practice.suspended? 
 can :read, Client, :practice_id => user.practice_id
else 
can :manage, CLient, :practice_id => user.practice_id
etc....
但出于某种原因,虽然我可以使用

user.practice_id
在能力模型中 我不能用

user.practice.<attribute>
models/practice.rb

belongs_to :user
一个实践有很多用户。 唯一没有实践的用户是那些角色为admin的用户

has_many :users

我认为你们的关系倒退了

应该是“用户有很多(或只有一个)实践”和“实践属于用户”。这意味着外键(在本例中为用户id)实际上在练习表中,而不是在用户表中

试试这个:

User.rb

has_one :practice
Practice.rb

belongs_to :user
创建迁移以将用户id添加到实践中

add_column :practices, :user_id, :integer
然后您可以从用户处调用practice,如下所示:

user.practice.x

你说我不能使用是什么意思?你有错误吗?确切地说是哪一个?你能从你的模型中发布一些代码吗?如果你不能调用user.practice.attribute,请粘贴你是如何在用户和实践之间建立关系的。有件事告诉我你以错误的方式建立了关系。你能试一下吗
can:manage,Client,:practice=>{:practice\u id=>user.practice.id}
每个机构(一个公司)都有许多用户。因此,每个用户都有practice_id,表示他们属于哪个机构。我说的对吗?好吧,我想这是有道理的。。。但是,用户可以属于多个机构吗?不可以。想象一下一家公司的机构,该机构的所有用户都在该公司的客户上工作。因此,任何用户都是该机构的雇员,因此只有一个机构。