2011-10-20 152 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