gpt4 book ai didi

ruby-on-rails - 丰富连接表的嵌套属性,使用 simple_form Rails

转载 作者:行者123 更新时间:2023-12-04 03:44:39 25 4
gpt4 key购买 nike

我想创建一个具有嵌套属性的表单,该表单在富连接表中填充一条记录。 (在富连接表中创建的记录当然应该具有适当的外键。)

我还没有找到关于在 has_many :through 上创建嵌套表单字段的彻底答案。关系。请帮忙!

对于这个例子,我有一个用户表单。在该表单中,我还尝试在 users_pets 中填充一条记录。表(富连接表)。

附加问题:富连接模型应该是单数还是复数?示例:app/models/owners_pets.rbapp/models/owners_pet.rb .

应用程序/模型/owner.rb

class Owner < ActiveRecord::Base
has_many :owners_pets, allow_destroy: true
has_many :pets, through: :owners_pets
end

应用程序/模型/pet.rb
class Pet < ActiveRecord::Base
has_many :owners_pets, allow_destroy: true
has_many :owners, through: :owners_pets
end

应用程序/模型/owners_pets.rb
class OwnersPet < ActiveRecord::Base
belongs_to :owners
belongs_to :pets
end

应用程序/ Controller /owners.rb
def owner_params
params.require(:owner).permit(:first_name, owners_pets_attributes: [:id, :pet_name, :pet_id])
end

app/views/owners/_form.html.erb
<%= simple_form_for(@owner) do |f| %>
<%= f.input :first_name %>
<%= f.simple_fields_for :owners_pets do |ff|
<%= ff.input :pet_name %>
<% end %>
<div>
<%= f.button :submit %>
</div>
<% end %>

最佳答案

这是答案,感谢导师的大量帮助。它帮助我记住富连接命名约定在最后不应该复数,就像其他非富连接模型一样。例如:book_page.rb不是 books_pages.rb.books_page.rb会工作(只需相应地更新您的强参数和数据库表)。重要的部分是整个模型必须遵循单数模型的 rails 约定(末尾没有“s”)。

在下面的富联接模型中,我决定将其命名为完全单数版本:owner_pet.rb与其他版本相反:owners_pet.rb . (当然,我的数据库表被命名为: owner_pets )

应用程序/模型/owner.rb

class Owner < ActiveRecord::Base
has_many :owner_pets
has_many :pets, through: :owner_pets
accepts_nested_attributes_for :owner_pets, allow_destroy: true
end

应用程序/模型/pet.rb
class Pet < ActiveRecord::Base
has_many :owner_pets
has_many :owners, through: :owner_pets
end

应用程序/模型/owner_pet.rb
class OwnerPet < ActiveRecord::Base
belongs_to :owner
belongs_to :pet
end

应用程序/ Controller /owners.rb
def new
@owner = Owner.new
@owner.owner_pets.build
end
private
def owner_params
params.require(:owner).permit(:first_name, owner_pets_attributes: [:_destroy, :id, :pet_name, :pet_id, :owner_id])
end

app/views/owners/_form.html.erb
<%= simple_form_for(@owner) do |f| %>
<%= f.input :first_name %>
<%= f.simple_fields_for :owner_pets do |ff| %>
<%= ff.input :pet_name %>
<%= ff.input :pet_id, collection: Pet.all, label_method: "pet_type" %>
<% end %>
<div>
<%= f.button :submit %>
</div>
<% end %>

关于ruby-on-rails - 丰富连接表的嵌套属性,使用 simple_form Rails,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27975187/

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