-
Notifications
You must be signed in to change notification settings - Fork 614
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
recursive_on_duplicate_key_update
and unique validations
#841
Comments
@kalsan did you happen to make any progress on this? Dealing with the same issue. |
That fixed it @jkowens, thank you very much! |
That's great news. Just released fix in v1.8.0 🎉 |
@kaliara thanks for following up. I'm wondering if the issue is due to the scoped uniqueness validation, will need to investigate. |
Let me know if I can provide any further information :-) |
@kalsan I'm curious, does the Customer and Subscription import work with validations if you don't do a recursive import? |
@jkowens good point. It does not. The used code: import_result = Customer.import(
customers,
on_duplicate_key_update: {
conflict_target: %i[imported_by_id imported_id],
columns: %i[
first_name
last_name
contact_person
address_extra
street_and_number
zip_code
town
country
birth_date
bad_payer
notes
]
}
) Experiments:
|
@kalsan can you provide a simple application that reproduces this error? I seem to be having trouble doing so. |
@jkowens here you go :-) Steps required:
Let me know if I can help with anything :-) |
Thanks @kalsan this was helpful. So I've determined there is an inherit issue with the way validations are handled for activerecord-import. We jump thru hoops to prevent uniqueness validations from running for a model, but we didn't account for the fact that associations are validated for a record as well. We'll have to think this over a bit. |
@jkowens thanks for following up :-) It's awesome that you take the time and commitment to make the Gem even better! |
@kalsan I strongly recommend against using Rails to validate uniqueness, regardless of using Activerecord-Import or not. The way Rails validates uniqueness is by executing a query in the database to see if there's already a row with an existing, in your case,
Instead, make sure you have uniqueness constrains in the database and let the database take care of the validation. Then handle the exception that is raised. You need to do this anyway due to the above mentioned race condition (if you uniqueness constrains). Or you can use this gem [1] that handles this automatically. |
Hey there and thank you for this awesome gem!
I'm currently using it to import a compount key in the following form where
Customer
has_many :subscriptions
:As you can see in the "TODO" marked parts above, I need to pass
validate: false
for the record to sucessfully import. Otherwise, the following validation inSubscription
fails:I'm wondering whether this is a problem of understanding on my side or a bug.
Thanks a lot in advance!
Best,
Kalsan
The text was updated successfully, but these errors were encountered: