Rails嵌套与茧的形式。使用模型的属性

路易斯·汉里克(Luiz Henrique)

我试图创建一个包含选项和子选项的嵌套表单,它们都来自称为Option的同一模型。这是文件的内容:

模型:

class Option < ApplicationRecord
  belongs_to :activity
  has_many :option_students
  has_many :students, through: :option_students

  has_many :suboptions,
    class_name: "Option",
    foreign_key: "option_id"

  belongs_to :parent,
    class_name: "Option",
    optional: true,
    foreign_key: "option_id"

  accepts_nested_attributes_for :suboptions,

    reject_if: ->(attrs) { attrs['name'].blank? }

  validates :name, presence: true
end

控制器:

class OptionsController < ApplicationController
  include StrongParamsHolder

  def index
    @options = Option.where(option_id: nil)
  end

  def show
    @option = Option.find(params[:id])
  end

  def new
    @option = Option.new()
    1.times { @option.suboptions.build}
  end

  def create
    @option = Option.new(option_params)
    if @option.save
      redirect_to options_path
    else
      render :new
    end
  end

  def edit
    @option = Option.find(params[:id])
  end

  def update
    @option = Option.find(params[:id])
    if @option.update_attributes(option_params)
      redirect_to options_path(@option.id)
    else
      render :edit
    end
  end

  def destroy
    @option = Option.find(params[:id])
    @option.destroy
    redirect_to options_path
  end

end

_form.html.erb:

<%= form_for @option do |f| %>

  <p>
    <%= f.label :name %><br>
    <%= f.text_field :name %><br>
    <%= f.label :activity %><br>
    <%= select_tag "option[activity_id]", options_for_select(activity_array) %><br>
  </p>

  <div>
    <div id="suboptions">
      <%= f.fields_for :suboptions do |suboption| %>
        <%= render 'suboption_fields', f: suboption %>
      <% end %>

      <div class="links">
        <%= link_to_add_association 'add suboption', f, :suboptions %>
      </div>
    </div>
  </div>

  <p>
    <%= f.submit "Send" %>
  </p>
<% end %>

_suboption_fields.html.erb

<div class="nested-fields">
  <%= f.label :suboption %><br>
  <%= f.text_field :name %>
  <%= link_to_remove_association "X", f %>
</div>

StrongParamsHolder:

def option_params
    params.require(:option).permit(:name, :activity_id, :students_ids => [], suboptions_attributes: [:id, :name])
end

该视图已正确创建,但未保存。它在创建控制器上转到“ render:new”。我认为参数应该是一个问题,但我不确定是什么。

纳森达

可能由于验证失败而无法保存。如果您使用的belongs_toRails 5,则现在更加严格,并且要保存嵌套参数,您需要使关联之间的连接/关系明确。

因此,如果您inverse_of按如下所示添加关系,恕我直言,它将起作用

has_many :suboptions,
  class_name: "Option",
  foreign_key: "option_id",
  inverse_of: :parent 

belongs_to :parent,
  class_name: "Option",
  optional: true,
  foreign_key: "option_id"
  inverse_of: :suboptions

如果另一个验证失败,它也可以帮助您列出表单中的错误(例如,可能@option.errors.full_messages.inspect会有所帮助:)

顺便说一句:我将option_id数据库中字段重命名为,以便parent_id更清楚地传达其含义。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Rails不会使用多态模型保存嵌套形式

来自分类Dev

Rails茧形嵌套形式:NilClass:Class的未定义方法“ reflect_on_association”

来自分类Dev

Rails-茧形宝石-嵌套表格

来自分类Dev

使用Rails 4以简单的形式设计多态关联嵌套属性

来自分类Dev

Rails茧形嵌套表单仅接收一个第一个嵌套属性

来自分类Dev

使用JavaScript的无限嵌套模型的has_many的Rails嵌套属性form_for

来自分类Dev

Rails:模型接受嵌套属性错误

来自分类Dev

jQuery触发嵌套窗体Rails茧上的所有实例

来自分类Dev

Rails嵌套表单-重构创建动作| 茧宝石

来自分类Dev

嵌套的模型属性+邪恶的向导形式不起作用

来自分类Dev

Ruby on Rails-嵌套模型形式错误消息

来自分类Dev

在模型的嵌套属性上使用DisplayFor

来自分类Dev

如何使用嵌套属性查找模型

来自分类Dev

在模型的嵌套属性上使用DisplayFor

来自分类Dev

Ruby on Rails-如何使用嵌套模型

来自分类Dev

如何使用Rails 4设置嵌套模型

来自分类Dev

4.2没有茧,简单形式还是形式?嵌套表格食谱

来自分类Dev

通过关联和嵌套模型形式使用has_many选择rails4集合

来自分类Dev

Rails 4的嵌套属性不会创建has_many模型

来自分类Dev

带有嵌套属性的Rails 4 Filter模型多次

来自分类Dev

Rails 3 Form Helper用于具有嵌套属性的模型

来自分类Dev

Rails 在使用嵌套模型创建时引用了错误的模型

来自分类Dev

嵌套形式(茧状宝石)在视图导轨中不可见

来自分类Dev

在Rails查询中使用关联模型的属性

来自分类Dev

Rails 嵌套属性不使用carrierwave 保存

来自分类Dev

Rails保存嵌套模型

来自分类Dev

使用嵌套属性保存一对多模型

来自分类Dev

使用嵌套属性保存一对多模型

来自分类Dev

Rails 4使用父属性覆盖模型属性

Related 相关文章

  1. 1

    Rails不会使用多态模型保存嵌套形式

  2. 2

    Rails茧形嵌套形式:NilClass:Class的未定义方法“ reflect_on_association”

  3. 3

    Rails-茧形宝石-嵌套表格

  4. 4

    使用Rails 4以简单的形式设计多态关联嵌套属性

  5. 5

    Rails茧形嵌套表单仅接收一个第一个嵌套属性

  6. 6

    使用JavaScript的无限嵌套模型的has_many的Rails嵌套属性form_for

  7. 7

    Rails:模型接受嵌套属性错误

  8. 8

    jQuery触发嵌套窗体Rails茧上的所有实例

  9. 9

    Rails嵌套表单-重构创建动作| 茧宝石

  10. 10

    嵌套的模型属性+邪恶的向导形式不起作用

  11. 11

    Ruby on Rails-嵌套模型形式错误消息

  12. 12

    在模型的嵌套属性上使用DisplayFor

  13. 13

    如何使用嵌套属性查找模型

  14. 14

    在模型的嵌套属性上使用DisplayFor

  15. 15

    Ruby on Rails-如何使用嵌套模型

  16. 16

    如何使用Rails 4设置嵌套模型

  17. 17

    4.2没有茧,简单形式还是形式?嵌套表格食谱

  18. 18

    通过关联和嵌套模型形式使用has_many选择rails4集合

  19. 19

    Rails 4的嵌套属性不会创建has_many模型

  20. 20

    带有嵌套属性的Rails 4 Filter模型多次

  21. 21

    Rails 3 Form Helper用于具有嵌套属性的模型

  22. 22

    Rails 在使用嵌套模型创建时引用了错误的模型

  23. 23

    嵌套形式(茧状宝石)在视图导轨中不可见

  24. 24

    在Rails查询中使用关联模型的属性

  25. 25

    Rails 嵌套属性不使用carrierwave 保存

  26. 26

    Rails保存嵌套模型

  27. 27

    使用嵌套属性保存一对多模型

  28. 28

    使用嵌套属性保存一对多模型

  29. 29

    Rails 4使用父属性覆盖模型属性

热门标签

归档