目前,我已使用has_and_belongs_to_many关联在我的应用中定义了两个模型,即帐户和用户。
应用内的帐户指的是公司等组织。
我能够轻松获得当前用户,但如果当前用户有多个帐户,我很难找到构建存储当前帐户的对象的方法。
现在我默认为属于当前用户的第一个帐户,我猜测解决方案将在我定义的路径中包含所选帐户ID参数,但我不是我确实知道如何做到这一点,因为我对RoR还不熟悉,如果可能的话,我更愿意在幕后进行设置,而不会在URL中显示帐号ID。
修改 - 添加代码
模型/ account.rb
class Account < ActiveRecord::Base
#define relationship to users
has_and_belongs_to_many :users
#...
end
模型/ user.rb
class User < ActiveRecord::Base
#define relationship to account
has_and_belongs_to_many :accounts
#...
end
**在将帐户和用户关联更新为habtm之前的先前'current_account'实现。
控制器/ application_controller.rb
class ApplicationController < ActionController::Base
protect_from_forgery
helper_method :current_account
private
def current_account
if user_signed_in?
@current_account ||= Account.find(current_user.account_id)
end
end
end
上面的current_account帮助方法不再有效,因为我已经从帐户更改了关联,许多用户和用户属于帐户到帐户,并且属于许多用户,反之亦然。现在我已经将上面的代码更新为
@current_account ||= current_user.accounts[0]
但显然这仍然是一个静态变量,我需要它是动态的,具体取决于用户选择的帐户。
此外,我正在使用设计,因此我可以利用他们的current_user帮助方法轻松获取当前用户。
非常感谢任何帮助!
答案 0 :(得分:0)
抱歉,我一直很忙。
从源头开始,你可能不需要habtm,即使你这样做,你似乎错过了中间表来保持两个模型之间的关联。你需要一个habtm的唯一方法是当一个帐户有几个用户时,这看起来有点奇怪。
帐户
class Account < ActiveRecord::Base
belongs_to :user
end
用户
class User < ActiveRecord::Base
has_many :users
end
似乎更好。
然而,让我继续猜测你想要得到什么,
可能你想要定义一个组织,并将几个用户连接到它,你需要habtm,模型就是这样,
用户
class User < ActiveRecord::Base
has_many :accounts
has_many :organizations, through: :accounts
end
组织
class Organization < ActiveRecord::Base
has_many :accounts
has_many :organizations, through: :accounts
end
帐户
class Account < ActiveRecord::Base
has_many :users
has_many :organizations
end
帐户模型将是您所谓的中间表(它可能被称为首先考虑的其他事项)并且将保留哪个用户与组织相关,反之亦然, 它可以保存不属于用户或组织的内容,例如组织特定的帐号或user_type。
如果您对轨道上的许多人不熟悉,请参阅Railscast关于此处的多对多关联。
许多关系的提示和注意事项不受Rails的限制,所以如果你不熟悉它们,我建议在互联网上查找关于它们的信息,关系数据库作为关键字。
希望这可以指出正确的方向,如果您需要更多帮助,请发表评论。