2012-11-01 70 views
4

所以我有以下型號在我的計劃:主動聯繫嵌套協會

class User < ActiveRecord::Base 
    has_many :group_members 
    has_many :groups, through: :group_members 

class GroupMember < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :group 
end 

class Group < ActiveRecord::Base 
    has_many :group_members 
    has_many :users, through: :group_members 
end 

而且我使用ActiveAdmin來管理這些資源。我groups.rb文件中的管理文件夾看起來是這樣的:

ActiveAdmin.register Group do 
. 
. 
    belongs_to :user, :optional => true 
. 
. 
end 

的問題是,集團是資源本身 - 管理員可以通過進入/admin/groups路線管理組 - 但它也爲用戶的資源,我可以通過訪問/admin/users/:user_id/groups路由查看用戶組。然而,當我嘗試創建一個新的小組,該用戶通過訪問/admin/users/:user_id/groups/new頁面並填寫表格,我得到一個錯誤:

ActiveRecord::RecordNotFound in Admin::GroupsController#show 
Couldn't find Group with id=13 [WHERE `group_members`.`user_id` = 2] 

用戶ID對應於我的當前登錄的用戶,這是正確的,而組ID = 13對應於新創建的組的ID(它正確保存在數據庫中),但是group_members表中的關聯未創建。實際上,這還不是我想要達到的目標:理想的情況是檢索組列表並將其顯示在新頁面中,以免在此頁面中創建新的groups - 僅限group_members

我如何在這種情況下繼續?提前致謝!

回答

4

你有沒有考慮在組寄存器塊取出

belongs_to 

聲明?這個DSL語句爲您提供的接口嵌套,看起來不錯,併爲您提供了一個點擊路徑,但最終它僅僅是對數據(模型)的修飾。在用戶模型中使用過濾器和範圍也可以。如果您真的需要aa的belongs_to,您將不得不創建自定義編輯屏幕和自定義重定向。祝你好運。