Ruby on rails Rails嵌套属性与\u多个关联不创建
我试图提供一种方法,在一个模型中生成一个新的对象列表,在另一个项目中使用通过分组的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毫秒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的帖子/列表
很明显,我还在学习,但是在这个论坛上尝试了各种相关的提示之后,我想不出这个。谢谢你的帮助 定义参数时,语法有一些错误。它应该是这样的: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