如何将新模型添加到嵌套模型导轨

Posted

技术标签:

【中文标题】如何将新模型添加到嵌套模型导轨【英文标题】:How to add new model to nested model rails 【发布时间】:2014-03-11 05:45:30 【问题描述】:

我有这样嵌套的模型

论文 has_many Questions 问题 has_one 标签

Paper 和 question 的数据由嵌套形式同时提供,然后显示 作为一个文档,现在我想添加一个功能,用户可以在其中为每个问题添加评论。我怎样才能做到这一点?

这是我的论文

class PapersController < ApplicationController
#I have removed other methods to keep it simple
#this is creating three question and one tag that is filled via a form      
      def new
        @paper = Paper.new
        3.times do 
           question = @paper.questions.build
           1.times  question.build_tag  
         end

      end
end

#Paper model    
class Paper < ActiveRecord::Base

              has_many :questions, dependent: :destroy

              accepts_nested_attributes_for :questions, reject_if: proc  |attributes| attributes['content'].blank? , :allow_destroy => true

end

#Question Model    
class Question < ActiveRecord::Base
      belongs_to :paper
      has_many   :comments, dependent: :destroy
      has_one    :tag, dependent: :destroy

      accepts_nested_attributes_for :tag

end

#Tag model
class Tag < ActiveRecord::Base
      belongs_to :question

end

现在我想为每个问题添加评论,以便可以单击该问题并使用其 cmets 在另一个页面中查看。

我还没有 QuestionsController、TagController

【问题讨论】:

SO 不是这个问题的网站。如果您还没有学习过 Rails 教程,请先阅读一个,然后在遇到特定代码问题时提出问题。 这不是我们从零开始帮助你的地方,至少先做一些功课。当你尝试并停留在某个地方时回来。 伙计,谢谢你的建议,但从我已经做了一些事情的问题来看,这不是很明显吗?你可以用两行回答,但选择讲课。 我们不是在给你讲课。像这样的问题会被关闭,因为它要求用户使用很长/很大的代码来回答,才能被接受。如果您确实实施了调查和问题部分,那么添加另一个模型应该不会有任何问题。如果您可以将问题更改为遇到问题的特定代码,我们将非常乐意提供帮助。 【参考方案1】:

has_many

#app/models/question.rb
Class Question < ActiveRecord::Base
    has_many :comments
end

#app/models/comment.rb
Class Comment < ActiveRecord::Base
    belongs_to :question
end

您需要查看has_many association:


创建

如果您想为某个问题创建 cmets,您应该查看此RailsCast。我会这样做:

#config/routes.rb
resources :questions do
    resources :comments # -> domain.com/questions/1/comments/new
end

#app/controllers/comments.rb
def new 
    @comment = Comment.new
end 

def create
    @comment = Comment.new(comments_params)
end

private
def comments_params
     params.require(:comments).permit(:your, :attributes).merge(question_id: params[:question_id])
end

【讨论】:

感谢您的回复,您能检查一下我是否修改了问题。

以上是关于如何将新模型添加到嵌套模型导轨的主要内容,如果未能解决你的问题,请参考以下文章

如何将嵌套数组添加到我的模型类

BigQuery 将新列添加到子查询中的嵌套 STRUCT

将新的键/值对添加到 PostgreSQL JSON 列内的嵌套数组中

遍历嵌套的 json 数组正在将先前分配的值添加到数据模型

如何从多个模型记录中添加整数? [导轨]

在 Backbone.js 的显示视图中嵌套创建视图