【发布时间】:2019-08-14 15:54:16
【问题描述】:
好吧,我在一个名为 Actives 的表上的联系人和诉讼之间存在多对多关联。在这种情况下,我试图将许多联系人添加到诉讼中。问题是:如果 select 是多个,则活动不会在诉讼中保存,只有当多个:false。
这是模型:
#contact.rb
class Contact < ActiveRecord::Base
...
has_many :actives
has_many :lawsuits, through: :actives
#lawsuit.rb
class Lawsuit < ActiveRecord::Base
...
has_many :actives
has_many :contacts, through: :actives
accepts_nested_attributes_for :actives, allow_destroy: true
#active.rb
class Active < ActiveRecord::Base
...
belongs_to :lawsuit
belongs_to :contact
这是迁移表:
class CreateActives < ActiveRecord::Migration
def change
create_table :actives do |t|
t.belongs_to :contact, index: true
t.belongs_to :lawsuit, index: true
t.datetime :appointment_date
t.timestamps
end
end
end
控制器:
#controller/lawsuit.rb
#create method
def create
@lawsuit = Lawsuit.new(lawsuit_params)
respond_to do |format|
if @lawsuit.save
format.html { redirect_to @lawsuit, notice: 'Lawsuit was successfully created.' }
format.json { render :show, status: :created, location: @lawsuit }
else
format.html { render :new }
format.json { render json: @lawsuit.errors, status: :unprocessable_entity }
end
end
end
#require params
params.require(:contact).permit(:name, :lastname, :cpf, :rg, :birthdate, :profession_id, :marital_status_id, :address,
:zipcode, :city, :state, :district, :number, :actives)
视图和输出参数:
#/views/lawsuits/_form.html.erb
<%= form_for @lawsuit, html: {class: "ui form"} do |f| %>
...
<%= f.fields_for :actives do |w| %>
<%= w.select(:contact_id, Contact.all.pluck(:name,:id), {}, {class:"selectize-generic", multiple: true}) %>
<% end %>
<%= f.submit %>
#Params:
Parameters: {"utf8"=>"✓", "authenticity_token"=>"9dpRjs0e2iQXgYzNqObSyzuvEnVdQYVHos922hbu0UptxiVeZfJgxgbfgFGKOUR16119VFLOfheNGogAOwez/w==",
"lawsuit"=>{"autos"=>"", "forum_id"=>"1", "lawyer_id"=>"4", "conciliation_date"=>"", "instruction_date"=>"", "fees"=>"",
"actives_attributes"=>{"0"=>{"contact_id"=>["", "2", "7", "9"]}}}, "commit"=>"Create Lawsuit"}
在上次保存的诉讼中:
rails c
x = Lawsuit.last
=> #<Lawsuit id: 17, forum_id: 1, lawyer_id: 4, fees: nil, autos: "", conciliation_date: "", instruction_date: "", created_at: "2019-08-14 15:43:18", updated_at: "2019-08-14 15:43:18">
x.actives
=> #<ActiveRecord::Associations::CollectionProxy [#<Active id: 9, contact_id: nil, lawsuit_id: 17, appointment_date: nil, created_at: "2019-08-14 15:43:18", updated_at: "2019-08-14 15:43:18">]>
我在这方面浪费了很多时间,我已经尝试了所有方法,重新创建模型,尝试了 simple_form gem,更改参数等等。我迷路了。 有人可以帮忙吗?
项目的 GitHub: https://github.com/killerowns/lawsuit-manager-rails
【问题讨论】:
-
您是否研究过或知道嵌套属性? api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/…
-
嘿,Kori,是的,我知道,我只是忘了在这篇文章中加入。
标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-4 ruby-on-rails-5