gpt4 book ai didi

ruby-on-rails - 验证表单中是否存在嵌套属性

转载 作者:数据小太阳 更新时间:2023-10-29 07:25:32 26 4
gpt4 key购买 nike

我有以下联想:

#models/contact.rb
class Contact < ActiveRecord::Base
has_many :contacts_teams
has_many :teams, through: :contacts

accepts_nested_attributes_for :contacts_teams, allow_destroy: true
end

#models/contacts_team.rb
class ContactsTeam < ActiveRecord::Base
belongs_to :contact
belongs_to :team
end

#models/team.rb
class Team < ActiveRecord::Base
has_many :contacts_team
has_many :contacts, through: :contacts_teams
end

一个联系人应该总是有至少一个关联的团队(在contacts_teams 的富连接表中指定)。

如果用户试图在没有关联团队的情况下创建联系人:应该抛出验证。如果用户试图删除联系人的所有关联团队:应抛出验证。

我该怎么做?

我确实看过 nested attributes文档。我也看了this articlethis article这两个都有点过时了。

为了完成:我正在使用 nested_form_fields gem 将新的关联团队动态添加到联系人。这是表格上的相关部分(有效,但目前无法验证至少有一个团队与该联系人相关联):

<%= f.nested_fields_for :contacts_teams do |ff| %>
<%= ff.remove_nested_fields_link %>
<%= ff.label :team_id %>
<%= ff.collection_select(:team_id, Team.all, :id, :name) %>
<% end %>
<br>
<div><%= f.add_nested_fields_link :contacts_teams, "Add Team"%></div>

因此,当“添加团队”未被单击时,与团队相关的参数不会传递任何内容,因此不会创建 contacts_team 记录。但是当单击“添加团队”并选择一个团队并提交表单时,会通过参数传递类似这样的内容:

"contacts_teams_attributes"=>{"0"=>{"team_id"=>"1"}}

最佳答案

在 Rails 5 中,这可以使用:

validates :contacts_teams, :presence => true

关于ruby-on-rails - 验证表单中是否存在嵌套属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36187666/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com