Ruby on rails Rails嵌套属性与\u多个关联不创建

Ruby on rails Rails嵌套属性与\u多个关联不创建,ruby-on-rails,activerecord,associations,ruby-on-rails-5.1,Ruby On Rails,Activerecord,Associations,Ruby On Rails 5.1,我试图提供一种方法,在一个模型中生成一个新的对象列表,在另一个项目中使用通过分组的has_many-through关系生成一个新的关联对象。我能够使表单正常工作,但无法找出我缺少的内容,以便正确完成创建过程 铁路v。5.1.2,Ruby v。2.4.1 列出\u controller.rb 项目\u controller.rb list.rb模型 item.rb模型 分组.rb模型 列表表格 控制台输出示例 2017-09-19 13:12:53-0700开始发布127.0.0.1的帖子/列表

我试图提供一种方法,在一个模型中生成一个新的对象列表,在另一个项目中使用通过分组的has_many-through关系生成一个新的关联对象。我能够使表单正常工作,但无法找出我缺少的内容,以便正确完成创建过程

铁路v。5.1.2,Ruby v。2.4.1

列出\u controller.rb

项目\u controller.rb

list.rb模型

item.rb模型

分组.rb模型

列表表格

控制台输出示例

2017-09-19 13:12:53-0700开始发布127.0.0.1的帖子/列表 ListControllerCreate作为HTML进行处理 参数:{utf8=>✓, 真实性标志=>y6rszwvuxdivymuobkxwvkw1pvbyc6mfiwizzr7pvd1nt9jji6rd72k5fh2q5q5ted0qn6bfymsjnz2tgjaa==,列表=>{title=>网站,项目属性=>{0=>{title=>谷歌,url=>www.Google.com},1=>{title=>雅虎,url=>www.Yahoo.com},2=>必应,url=>www.Bing.com},commit=>创建列表} 用户加载0.3ms选择用户。*来自用户,其中users.id=$1 ORDER BY users.id ASC LIMIT$2[[id,2],[LIMIT,1]] 不允许的参数::项\属性 0.1ms开始 SQL 0.9ms插入列表标题、创建位置、更新位置、用户id值$1、$2、$3、$4返回id[[标题,网站],[创建位置,2017-09-19 20:12:53.458577],[更新位置,2017-09-19 20:12:53.458577],[用户id,2]] 0.3ms提交 重定向到 在7毫秒ActiveRecord中找到完整的302个:1.6毫秒


很明显,我还在学习,但是在这个论坛上尝试了各种相关的提示之后,我想不出这个。谢谢你的帮助

定义参数时,语法有一些错误。它应该是这样的:items代替item,您不需要{}

def list_params
  params.require(:list).permit(:title,
  items_attributes: [:id, :title, :url])
end

您就快到了,但控制台日志中报告了一个错误:Unpermitted parameter::items\u attributes

将列表参数中的项目属性更改为项目属性:


这就成功了……我明白了——我还必须删除验证列表?在item.rb模型中,以使此配置工作。你太棒了。
     def new
       @item = Item.new
     end

    private

     def set_item
      @item = Item.find(params[:id])
     end


    def item_params
       params.require(:item).permit(:title, :body, :url, :created, 
     :list_ids => [])
      end
     end
 has_many :groupings, :dependent => :destroy 
 has_many :items, :through => :groupings

 accepts_nested_attributes_for :items,

 reject_if: ->(attrs) { attrs['title'].blank? || attrs['url'].blank? }
 has_many :groupings, :dependent => :destroy
 has_many :lists, :through => :groupings
 validate :has_lists?
  accepts_nested_attributes_for :lists

 attr_writer :list_titles
 after_save :assign_lists

  def list_titles
   @list_titles || lists.map(&:title).join(' ')
  end
   private

  def assign_lists
    if @list_titles
  self.lists = @list_titles.split(/\,/).map do |title|
    if title[0..0]==" "
      title=title.strip
    end
    title=title.downcase
    List.find_or_create_by_title(title)
   end
  end
 end

  def has_lists?
     errors.add(:base, 'This item needs to be assigned to a list before it can be saved.') if self.lists.blank?
   end
 belongs_to :item
 belongs_to :list

 accepts_nested_attributes_for :item, :list
 <%= form_with(model: list,  local: true) do |f| %>
<% if list.errors.any? %>
<div id="error_explanation">
  <h2><%= pluralize(list.errors.count, "error") %> prohibited this list from being saved:</h2>

  <ul>
  <% list.errors.full_messages.each do |message| %>
    <li><%= message %></li>
  <% end %>
  </ul>
</div>
<% end %>

<div class="field">
<%= f.label :title %>
<%= f.text_field :title, id: :list_title %>
</div>

<div>
<p><strong>Items:</strong></p>

 <%= f.fields_for :items do |item| %>
  <div>
    <%= item.label :title %>
    <%= item.text_field :title %>

    <%= item.label :url %>
    <%= item.text_field :url %>
  </div>
 <% end %>
 </div>




 <div class="actions">
<%= f.submit %>
 </div>
 <% end %>
def list_params
  params.require(:list).permit(:title,
  items_attributes: [:id, :title, :url])
end
def list_params
  params.require(:list)
        .permit(:title, items_attributes: [:id, :title, :url])
end