Rails – Cocoon gem – 嵌套表格

我正在尝试用Rails 4创建一个应用程序。

我为表单使用简单的表单gem,并尝试使用Cocoon gem作为表单的嵌套元素。

我问了这个问题,它解释了我想要更详细地实现的内容: Rails – 单个属性的多个条目

我有个人资料模型和资格模型。 协会是:

profile.rb

has_many :qualifications accepts_nested_attributes_for :qualifications, reject_if: :all_blank, allow_destroy: true 

qualification.rb

 belongs_to :profile 

配置文件控制器包含强参数中的限定属性:

 def profile_params params[:profile].permit(:user_id, :title, :hero, :overview, :research_interest, :occupation, :external_profile, :working_languages, :tag_list, qualifications_attributes: [:id, :level, :title, :year_earned, :institution, :_destroy] ) end 

我的个人资料表现在有:

  
Your qualifications

我的资格部分表单现在在我的资格视图文件夹中命名为_qualifications_fields.html.erb

 
"Your award" %>
"When did you graduate?", collection: (Date.today.year - 50)..(Date.today.year) %>

我注释掉了删除链接,因为我得到了这个错误:

 undefined method `new_record?' for nil:NilClass 

我对Rails报告错误的方式感到困惑 – 我很少理解这种风格的错误信息,但我认为这与没有任何资格要删除有关。 茧是否处理这个?

当我对此进行评论并再次尝试时,我会通过添加关联的链接收到此错误:

 undefined method `object' for # 

我不知道这个消息是什么意思。

因此,通过遵循Cocoon gem文档中的步骤,(因为我不知道如何用haml编写内容而进行更改;并且更改表达式的forms以引用表单生成器’f:f’在我的其余部分中工作表格,所以我猜测文档中显示的表达式可能与haml有关),我在这个阶段有2个错误:

  1. 添加关联 – 未定义的方法对象
  2. 删除关联 – 未定义的方法`new_record?

我很难理解这里发生了什么。

采取JEIWAN的建议:

我将个人资料表单更改为:

    
Your professional qualifications
'formsubmit' %>

我将我的资格字段表格更改为:

 
"Your award" %>
"When did you graduate?", collection: (Date.today.year - 50)..(Date.today.year) %>

当我保存并重试时,我收到此错误:

 undefined method `new_record?' for nil:NilClass 

错误消息突出显示以下行:

   

 link_to_add_association 'Add a qualification', f: f, partial: 'qualifications/qualification_fields' 

f: f在这里不正确。 第二个参数应该是表单构建器(只是一个对象,而不是哈希)和第三个参数 – 关联的名称,即:qualifications您的案例中的:qualifications 。 所以看起来应该是这样的:

 link_to_add_association 'Add a qualification', f, :qualifications, partial: 'qualifications/qualification_fields' 

和这里:

 link_to_remove_association 'Remove this qualification', f, :f 

:f也错了。 这里的第三个参数是HTML选项。 如果您不需要它们,那么只需指定2个参数:

 link_to_remove_association 'Remove this qualification', f 

接下来, _qualification_fields.html.erb不应包含simple_fields_for 。 此partial用于呈现一个不同关联对象的字段。 单击“添加资格”或父对象已具有某些资格时显示。 simple_fields_for :qualifications应该放在你的个人资料表格中,并包含render 'qualifications/qualifications_fields', f: flink_to_add_association ... 考虑这个例子: https : //github.com/nathanvda/cocoon#simpleform

Interesting Posts