I think I’m okay with recognizing a special value so that you can more
easily delete an attachment via a form, but given that we can choose any
value, I’d prefer something other than an empty string (like "delete" or {
"delete" => true }).

On Mon, Jul 16, 2018 at 12:33 AM Kyle Fox <kyle....@gmail.com> wrote:

> Sorry, I should've been more specific in my initial post:
>
>    - I'm proposing this change *only* for has_one_attachment i.e. the
>    ability to use user.update! image: "" in place of user.image.detach
>    - When comparing the behavior to has_many_attached, I mean in the
>    sense that has_many_attached detaches attachments when assigned a
>    blank value (nil or []), i.e. user.update! highlights: nil
>
> What would we do in the following cases? Ignore the empty strings?
>
>
>> user.update! highlights: [ "" ]
>> user.update! highlights: [ "eyJfcmF--e31aef3", "" ]
>
>
> You're right — in these cases it's not clear what should happen.
>
> Currently the empty strings would raise the InvalidSignature error. I
> suppose it would behave like this, if blank strings were treated as
> "detachments" / discarded?
>
>    - user.update! highlights: [ "" ] would effectively detach all
>    highlights
>    - user.update! highlights: [ "eyJfcmF--e31aef3", "" ] would attach a
>    single blob in the collection, i.e. user.highlights.length == 1
>
>
> Kyle.
>
> On Sunday, July 15, 2018 at 10:10:37 PM UTC-6, geo...@basecamp.com wrote:
>>
>> To be clear, the writer method added by has_many_attached does not
>> already accept empty strings.
>>
>> What would we do in the following cases? Ignore the empty strings?
>>
>> user.update! highlights: [ "" ]
>> user.update! highlights: [ "eyJfcmF--e31aef3", "" ]
>>
>> George
>>
>> On Sunday, July 15, 2018 at 11:41:05 PM UTC-4, Kyle Fox wrote:
>>>
>>> ActiveStorage allows attachments to be attached by assigning a string
>>> representing a blob's signed_id. This works _brilliantly_ because it
>>> enables the same params conventions used when assigning other attributes
>>> through forms → controllers → models:
>>>
>>> params = { user: { image: 'eyJfcmF--e31aef3' } }
>>>
>>> However, it's surprising that setting the attachment to an empty string
>>> does _not_ detach the attachment:
>>>
>>> params = { user: { image: '' } } # => InvalidSignature
>>>
>>> It feels more Railsy to treat the empty string as a special case that
>>> detaches the attachment.
>>>
>>> This would allow attachments to be removed in a way that mirrors how
>>> they are added (i.e. posting hidden field values) instead of having to call
>>> @user.image.detach in a controller. For example, this would handle both
>>> attaching and detaching @user.image:
>>>
>>> @user.update_attributes(params.require(:user).permit(:name, :email,
>>> :image))
>>>
>>> Ideally in this scenario, if params[:user][:image] was '' ActiveStorage
>>> would call @user.image.detach.
>>>
>>> Currently if you assign an empty string to an attachment an
>>> ActiveSupport::MessageVerifier::InvalidSignature error is raised.
>>>
>>> Apparently
>>> <https://github.com/rails/rails/issues/33362#issuecomment-405080017>
>>> this is already how has_many_attached behaves — it'd be nice if
>>> has_one_attached behaved similarly.
>>>
>>> Any interest in this functionality? If so I'd be happy to put together a
>>> patch. 👍
>>>
>> --
> You received this message because you are subscribed to the Google Groups
> "Ruby on Rails: Core" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to rubyonrails-core+unsubscr...@googlegroups.com.
> To post to this group, send email to rubyonrails-core@googlegroups.com.
> Visit this group at https://groups.google.com/group/rubyonrails-core.
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Core" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to rubyonrails-core+unsubscr...@googlegroups.com.
To post to this group, send email to rubyonrails-core@googlegroups.com.
Visit this group at https://groups.google.com/group/rubyonrails-core.
For more options, visit https://groups.google.com/d/optout.

Reply via email to