2011-09-14 22 views
0

如何構建我的Rails 3.x應用程序,以便登錄用戶只能看到與他所屬的組相關的記錄?Rails:Current_user應該只能看到他/她自己的組中的記錄。我該怎麼做呢?

例如, (足球主題)

想象一下這些機型:

一個團隊模式,分別代表30個職業橄欖球隊。

一個用戶模型,使用devise進行驗證。每個用戶都有一個team_id關聯。

一個玩家模型,代表NFL中的每個玩家:name:string,team_id:integer。

每個用戶都是一名主教練,並且應該只能夠在玩家#索引中看到他自己的玩家。 Rails知道這一點,因爲主教練(一個用戶)有一個與他相關的team_id,和球員一樣。

現在,只有兩個控制器(Team,Player),手動重新輸入索引和CRUD方法以顯示current_user的關聯記錄似乎相當容易。

def index 
    @players = Player.where(current_user.team_id = ?, 'player.team_id') 
end 

但是想象一下,你有6-10控制器: 門票, 交易, 員工, 合同, 等..... (全部具有TEAM_ID協會)

是否有Rails只顯示與current_user團隊相關的記錄的全局方式?
And ... Rails如何防止用戶將隨機ID輸入到URL中以查找與其team_id無關的記錄。 (想象一下紅皮教練打字http://www.thesite.com/players/224/edit)並且能夠編輯player_id = 224的牛仔隊球員。

謝謝。

回答

0

您可以使用Associations進行此操作。每個具有用戶關係的表格都可以有軌道模型關聯。

所以通過關係current_user.players等,你可以得到。

0

請嘗試看看下面的railscasts,瑞安貝茨做了一個很好的解釋這個東西的工作。還結賬teachmetocode網站。所有這些鏈接將爲您提供關聯基礎,以及如何在不同模型之間建立數據庫關聯,從而實現您想要的目標。這些鏈接應該讓你開始:

Self-Referential Association

Polymorphic Association

Two Many-to-Many

HABTM Checkboxes

Embedded Association

ActiveRecord::Relation Walkthrough

Active Record Queries in Rails 3

Many to Many Associations in Ruby on Rails – A Teach Me To Code Tutorial

2

如果所有的車型都會有TEAM_ID屬性,你需要在你的應用程序控制器大意如下定義之前過濾:

def identify_team 
    @team = current_user.team 
end 

在對方控制,你應該通過引用團隊變量來確定你的查詢的範圍

def index 
    @players = @team.players.all 
end 

你可以通過在控制器的CURRENT_USER(current_user.team.players.all)的理論範圍,但是這不會被認爲是最佳做法。

問候

羅賓

+0

爲什麼是窮人的做法在你的控制器使用CURRENT_USER? – Ken

+0

不使用'current_user',而是創建長關聯鏈 –