如何实例化具有多个belongs_to的Mongoid模型

时间:2014-11-26 22:07:11

标签: ruby-on-rails ruby-on-rails-4 mongoid4

我不确定如何实例化属于多个对象的对象:

class Project
    ...
    belongs_to      :project_lead,      :class_name => 'User'
    has_many        :users,             :class_name => 'User'
    has_many        :comments
end

class Comment
    ...
    belongs_to      :author,        :class_name => 'User',      inverse_of: :comments
    belongs_to      :project,       :class_name => 'Project',   inverse_of: :projects
    embeds_many     :replies,       :class_name => 'Reply'
end

class User
    ...
    has_many    :comments,      :class_name => 'Comment',   inverse_of: :author
    has_many    :projects,      :class_name => 'Project',   inverse_of: :project_lead
    has_many    :replies,       :class_name => 'Reply'
end

class Reply
    ...
    belongs_to  :author,    :class_name 'User'
    embedded_in :comment
end

基本上,项目必须属于用户。项目可以有很多注释(必须属于用户),反过来,每个注释都可以有很多回复(也必须属于用户)。

在我projects_controller.rb我有以下内容:

def new
    @user = current_user #that works fine
    @project = @user.projects.new # works fine
    @comment = @user.projects.comments.new #doens't work
end

但是我不知道如何使这项工作。我已经看过许多Mongoid模型的例子,但没有这种连接/复杂性。有可能/可以实现吗?如果没有,有什么替代方案?有人能指出我正确的方向吗?

非常感谢

1 个答案:

答案 0 :(得分:0)

@comment = @project.comments.new怎么样

您可以在评论表单中使用@project构建评论对象

您可以将评论视图中的user_id存储为隐藏值,如

#comments/_form.html.erb
 <%= form_for([@project, @project.comments.build]) do |f| %>
     <%= f.hidden_field :user_id, value: current_user.id %>

执行@comment = @user.projects.comments.new时,@ user.projects是数组。

希望它对你有用。