Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 7672497
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 31, 20262026-05-31T16:17:57+00:00 2026-05-31T16:17:57+00:00

Back-end: I have a model (User) that has_many of another model (ContactPreference). Front-end: An

  • 0

Back-end: I have a model (User) that has_many of another model (ContactPreference).
Front-end: An interface allowing the user to reorder, add, and delete contact preferences for a particular user.

I’d like to let the user commit all their changes all at once with a single form submit. The way I’m doing this now is with allows_nested_attributes_for :contact_preferences in the User model, and naively POSTing the attributes of the edited preferences list. It works just fine except for a glaring bug: If a user deletes a contact preference, the ID simply isn’t sent, and the preference doesn’t get deleted from the DB.

allows_nested_attributes_for has support for deleting objects from the collection, but it requires the client to keep track of what IDs were deleted and pass a '_destroy' => 1 parameter. This is messy logic that I’d rather avoid; I just want objects deleted unless they are explicitly included in the parameters. allows_nested_attributes_for doesn’t support this behavior as far as I can tell, so I’m looking to implement my own solution.

What’s the most efficient (in terms of database access) way to do this kind of update? Do I delete everything and rebuild the list from scratch? Do I load the association and pick out objects that aren’t explicitly included? Perhaps there’s some clever ActiveRecord magic I can use?

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-31T16:17:58+00:00Added an answer on May 31, 2026 at 4:17 pm

    My personal feeling is that doing this using the :destroy => 1 flag set a lot less messy than the alternative. The alternative would be loading the association on the server, comparing the incoming parameters, figuring out which records are missing, then deleting the missing ones and updating the remaining ones. That’s a lot of extra logic, DB operations, and worst of all, you’ll have to hand-rework the accepts_nested_attributes_for which is a non-trivial feat.

    HTML give you a little trick/hack to accomplish this without JS. Add a checkbox to each record with name :destroy. Use the high-level form helpers, e.g. check_box, not check_box_tag (which requires a lot of things to get right manually), or a higher level form helper such as the simple_form gem.

    If the flag is not checked, then HTML won’t submit anything, and the record stays. If the flag is checked, HTML will submit the :destroy flag, and it will be deleted with the built-in server-side mechanisms out of the box.

    You didn’t say much about your front-end code; it sounds like you have a bunch of JS on there. You probably hide the record when the user “removes” it, you can simply add the destroy flag programmatically in that case, if you don’t want to use the check box method above. This will be a lot simpler and less error prone than trying to second-guess the backend behavior.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I have a SQL Server Database back-end. I want an internal network front-end UI,
I have a web-app with a Java back-end that uses Tomcat jdbc-pool for database
I have a simple c++ application that generates reports on the back end of
I have a flex app that takes data from a back end database then
I am developing a back-end that process about 500 invoices a day. I have
I have created an MS Access 2003 application, set up as a split front-end/back-end
I have a User and Group model. User has_many Groups and Group belongs_to User
Let's say we have a User Model that has many Posts. The Posts Model
So I have a model called Image that belongs_to :user. Each user has a
I have a two middleman model setup as shown below: User has_many :comments has_many

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.