2011-10-20 108 views
0

需要一些建議。 我正在做一個RoR項目,不知道我應該使用哪些模型之間的關係。我有三種模型 - 用戶,電路板和消息。 一開始很簡單: 用戶有一個牆,它屬於用戶,所以我想這應該是:Ruby on Rails車型關係

class User < ActiveRecord::Base 
    has_one :board 
end 

class Board < ActiveRecord::Base 
    belongs_to :user 
end 

最後一個模型是消息和這纔是我的問題。消息屬於用戶原因,他寫它,但它也屬於牆,因爲他寫在牆上(它可以是屬於其他用戶的牆)。

我用了簡單的解決方案:

class Theme < ActiveRecord::Base 
    belongs_to :board 
    belongs_to :user 
end 

class User < ActiveRecord::Base 
     has_one :board 
     has_many :themes 
end 

class Board < ActiveRecord::Base 
     belongs_to :user 
     has_many :themes 
end 

但我不與它滿足了,覺得它是不完美的。我正在尋找一個解決方案,讓我寫這樣想:

user.themes.create(:board => @board) 

(現在不補USER_ID場)

我希望這不會是一項艱鉅的任務對於那些誰更有經驗比我在Ruby on Rails模型中。我會很感激良好的意見,謝謝。

回答

0

對於正常的你使用一些認證寶石像設計。然後你有current_user變量,它包含當前正在調用該動作的用戶的對象。

然後,當用戶創建的主題,你一個簡單的線條添加到控制器來設置用戶:

@theme.user = current_user 

你也應該使用像寶石康康舞管理在cenral文件中的授權。烈在這裏找到一個railscast:

http://railscasts.com/episodes/192-authorization-with-cancan

+0

據我所知,使用這種寶石是一個很好的做法,但我已經有我從紅寶石採取的邁克爾·哈特爾Rails的教程簡單的用戶模型。我可以做你的建議,但是我正在尋找一種解決方案,在這種解決方案中,你的路線是不必要的,就像一個簡單的多對一關係一樣。感謝您的幫助 – leonprou

+0

您需要添加一些處理此問題的行。沒有安全的選擇!因爲你可以添加一個提供user_id的隱藏字段,但是你可以通過用戶將控制權交給客戶端,因爲他可以操縱通過POST和GET提供的所有數據! – davidb

+0

其實,意外的方式是我的解決方案按我的意願工作。感謝您的建議,我肯定會在將來實施它們。 – leonprou