Ruby on Rails模型关系

时间:2011-10-20 11:37:43

标签: ruby-on-rails relational-database rails-models

需要一些建议。 我正在做一个关于RoR的项目,并且不确定我应该使用模型之间的关系。我有三个模型 - 用户,电路板和消息。 开始很简单: 用户有一个Wall,它属于User,所以我想这应该是:

class User < ActiveRecord::Base
  has_one :board
end

class Board < ActiveRecord::Base
    belongs_to :user
end

最后一个模型是消息,这是我的问题。消息属于用户因为他写的,但它也属于Wall,因为他把它写在墙上(它可以是属于其他用户的Wall)。

我使用了简单的解决方案:

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模型中比我更有经验的人来说,这不是一项艰巨的任务。我会很感激你的建议,谢谢。

1 个答案:

答案 0 :(得分:0)

正常情况下你会使用一些认证宝石。然后你有current_user变量,它包含当前正在调用该动作的用户的对象。

然后,当用户创建主题时,您可以向控制器添加一条简单的行来设置用户:

@theme.user = current_user

您还应该使用像cancan这样的gem来管理中心文件中的授权。你会在这里找到一个railscast:

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