Ruby on rails 嵌套模型形式。属于未显示的类

Ruby on rails 嵌套模型形式。属于未显示的类,ruby-on-rails,ruby-on-rails-3,ruby-on-rails-3.1,ruby-on-rails-3.2,Ruby On Rails,Ruby On Rails 3,Ruby On Rails 3.1,Ruby On Rails 3.2,我有一个科目模型和一个课程模型。 我实现了一个嵌套的模型表单 在主题创建之后,我把它引导到一个页面,在那里它应该显示相关的课程。然而,我没有看到教训 我相信课程的数据没有正确地保存为 当我做了一个示例课。按主题查找id('1')时,我得到了“nil” 我正在试图弄清楚多态性在rails上是如何工作的,如果有人能指出我哪里出了问题,或者给我一些指导,告诉我如何将这些值传递给要创建的类,我将不胜感激 主题模式 attr_accessible :subjectCode, :lessons_attrib

我有一个科目模型和一个课程模型。 我实现了一个嵌套的模型表单

在主题创建之后,我把它引导到一个页面,在那里它应该显示相关的课程。然而,我没有看到教训

我相信课程的数据没有正确地保存为 当我做了一个示例课。按主题查找id('1')时,我得到了“nil”

我正在试图弄清楚多态性在rails上是如何工作的,如果有人能指出我哪里出了问题,或者给我一些指导,告诉我如何将这些值传递给要创建的类,我将不胜感激

主题模式

attr_accessible :subjectCode, :lessons_attributes
has_many :lessons, :dependent => :destroy
accepts_nested_attributes_for :lessons, :reject_if => lambda { |a| a[:content].blank? }, :allow_destroy => true
课程模式

attr_accessible :lessonName, :subject, :subject_id
belongs_to :subject
主题控制器

def new
3.times {@subject.lessons.build}
end

def create
  @subject = Subject.new(params[:subject])
  if @subject.save
    redirect_to @subject, :notice => "Successfully created subject."
  else
    render :action => 'new'
  end
end
形式





3 %>

路线
资源:主题执行资源:课程结束

如果lambda总是拒绝课程属性,因为课程没有内容属性,所以你本质上是在评估
nil.blank?
,它将返回
true


也许您想检查课程名称是否为空?Ala
:reject_if=>lambda{a | a[:lessonName].blank?}

表单上没有课程的
内容
字段,因此每次课程的
内容都将为空。您还可以使用:

:reject_if => lambda { |a| a[:content].blank? }, :allow_destroy => true 

这将检查内容是否为空,主题将不会保存课程。这是您的问题,因为您的表单上没有内容字段,因此每次创建主题时内容都将为空,您使用了
:拒绝\u如果
,主题将不会保存其课程。如果您想让用户稍后放置课程内容,请删除
:reject_If=>lambda{a | a[:content].blank?}、:allow_destroy=>true
,您的课程将与相关主题一起保存。

您会收到任何错误,我们只是在保存
课程时没有
主题id
?此外,您还应在可访问的
属性中添加
:课程
:reject_if => lambda { |a| a[:content].blank? }, :allow_destroy => true