<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>oyaxira (露紫衣)</title>
    <link>https://ruby-china.org/oyaxira</link>
    <description></description>
    <language>en-us</language>
    <item>
      <title>这两天在玩 openai 的 chatgpt...</title>
      <description>&lt;p&gt;调戏这个 ai 真的挺好玩的.
不过本身他也只是个测试的 demo，不支持历史聊天记录的查询和导出.
而且一些玩法的时候本身网页还有一些验证。还不能从某个聊天历史重开.
所以第二天的时候就扒了一下 api 集成到自己的 ruby 机器人里了.
今天有朋友问所以把集成的逻辑单独抽了出来理了一下&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/Oyaxira/ruby_chatgpt_openai" rel="nofollow" target="_blank"&gt;https://github.com/Oyaxira/ruby_chatgpt_openai&lt;/a&gt;&lt;/p&gt;</description>
      <author>oyaxira</author>
      <pubDate>Fri, 09 Dec 2022 16:47:20 +0800</pubDate>
      <link>https://ruby-china.org/topics/42784</link>
      <guid>https://ruby-china.org/topics/42784</guid>
    </item>
    <item>
      <title>carrierwave-upyun 0.2.1 之后的 validate 好像有点小问题</title>
      <description>&lt;p&gt;之前的都是老项目使用的 carrierwave-upyun 锁定在了 0.1.7&lt;/p&gt;

&lt;p&gt;新开的项目用了新的之后发现 validates 出了点小问题&lt;/p&gt;

&lt;p&gt;主要是 validates: avatar presence: true 的判定不太对。&lt;/p&gt;

&lt;p&gt;0.2.1 之后 CarrierWave::Storage::UpYun::File 继承了 CarrierWave::SanitizedFile&lt;/p&gt;

&lt;p&gt;presence 本身调用的是对象的 blank?&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="c1"&gt;# File activesupport/lib/active_support/core_ext/object/blank.rb, line 15&lt;/span&gt;
  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;blank?&lt;/span&gt;
    &lt;span class="nb"&gt;respond_to?&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;:empty?&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="o"&gt;!!&lt;/span&gt;&lt;span class="n"&gt;empty?&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nb"&gt;self&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;在修改继承关系之前由于 CarrierWave::Storage::UpYun::File 没有 empty？方法所以会直接返回!self&lt;/p&gt;

&lt;p&gt;但是继承关系变了之后，在判断 presence 的时候会调用 CarrierWave::SanitizedFile 下的 empty？方法&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/carrierwaveuploader/carrierwave/blob/master/lib/carrierwave/sanitized_file.rb" rel="nofollow" target="_blank"&gt;https://github.com/carrierwaveuploader/carrierwave/blob/master/lib/carrierwave/sanitized_file.rb&lt;/a&gt;
139 行&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;empty?&lt;/span&gt;
  &lt;span class="vi"&gt;@file.nil&lt;/span&gt;&lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nb"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;size&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;nil?&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;size&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;zero?&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt; &lt;span class="nb"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;exists?&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;so 就悲剧了。于是赋值的时候 validate 没问题。但是 save 完执行 valid？就会返回 false&lt;/p&gt;

&lt;p&gt;目前只能在项目的 BaseUploader 里。打了个猴子补丁重新定义了一个 blank？方法。&lt;/p&gt;

&lt;p&gt;还有没有什么比较好的办法呢？&lt;/p&gt;</description>
      <author>oyaxira</author>
      <pubDate>Wed, 20 Sep 2017 13:56:27 +0800</pubDate>
      <link>https://ruby-china.org/topics/34198</link>
      <guid>https://ruby-china.org/topics/34198</guid>
    </item>
  </channel>
</rss>
