首先,感谢您花时间阅读。我是 Rails 的新手,并且已经坚持了好几个小时。
在我的 Rails 3.2 应用程序中,我有三个模型:用户、组织和成员资格(最后一个是用户和组织之间的连接模型)。
当用户创建组织时,他/她应该在创建时成为成员。因此,在我的组织模型中,我包含了一个用于构建成员资格的 before_create 回调。问题是,虽然在创建新组织时会建立成员资格,但成员资格对象上的 user_id 设置为“nil”,因此当前用户不是成员。
回调中的 user_id 属性中的硬编码实际上确实正确地构建了成员资格,即(:user_id => "1")
,但通常要求组织模型了解当前用户状态似乎是不好的 MVC 做法。
在新会员资格上设置当前用户 ID 的正确方法是什么?似乎我的协会应该处理这个问题,但我可能错了。
这是我的模型——为了便于阅读,我省略了一些验证行。提前非常感谢。
用户.rb
class User < ActiveRecord::Base
has_many :memberships
has_many :organizations, :through => :memberships
end
会员资格.rb
class Membership < ActiveRecord::Base
belongs_to :user
belongs_to :organization
end
组织.rb
class Organization < ActiveRecord::Base
has_many :memberships
has_many :users, :through => :memberships
accepts_nested_attributes_for :memberships, :allow_destroy => true
...
before_create :add_membership
protected
def add_membership
self.memberships.build
end
end