I have the following list of models in a Rails 4.2
app:
- User
- Company
- Marketplace
The associations look like the following:
User.rb
class User < ActiveRecord::Base
end
Company.rb
class Company < ActiveRecord::Base
has_many :company_marketplaces
has_many :marketplaces, through: :company_marketplaces
accepts_nested_attributes_for :marketplaces, update_only: true
end
Marketplace.rb
class Marketplace < ActiveRecord::Base
has_many :company_marketplaces
has_many :companies, through: :company_marketplaces
end
I am trying to build a form to allow adding/removing marketplaces to a company with the help of in-place editing library x-editable
. I was able to allow adding new marketplaces from an existing list but it fails on the removing because no data is submitted.
This is the relevant part of the view:
index.html.slim
td
= link_to company.marketplaces.join(", "), "", data: { :"name" => "marketplaces_attributes" , :"xeditable" => "true", :"url" => admin_agents_company_path(company), :"pk" => company.id, :"model" => "company", :"type" => "checklist", :"placement" => "right", :"value" => company.marketplaces.join(", "), :"source" => "/marketplaces" }, class: "editable editable-click"
And companies_controller.rb#update
method looks like the following:
companies_controller.rb
def update
respond_to do |format|
if @company.update(company_params)
format.html { redirect_to @company, notice: 'Company was successfully updated.' }
format.json
format.js
else
format.html { render :edit }
format.json { render json: @company.errors, status: :unprocessable_entity }
format.js
end
end
end
Most of the resources I was able to find do not deal with in-place editing or use fields_for
to work with nested_forms
.
Is there a solution to handle adding/removing has_many:
through:
associated objects in a form without relying on fields_for
?
Thanks
You can provide marketplaces_attributes in params.
Example from: http://api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/ClassMethods.html
Read more examples in that link above