我不确定如何实例化属于多个对象的对象:
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模型的例子,但没有这种连接/复杂性。有可能/可以实现吗?如果没有,有什么替代方案?有人能指出我正确的方向吗?
非常感谢
答案 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是数组。
希望它对你有用。