<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>zyjisdog (zyjisdog)</title>
    <link>https://ruby-china.org/zyjisdog</link>
    <description/>
    <language>en-us</language>
    <item>
      <title>在一个有翻页的页面上，如何实现跳转到其他页面再返回时能回到上次的页码？</title>
      <description>&lt;p&gt;我用&lt;code&gt;kaminari&lt;/code&gt;实现了 ajax 翻页功能，每一页显示 10 个&lt;code&gt;user&lt;/code&gt;的名字，每个名字指向他们的&lt;code&gt;profile&lt;/code&gt;。我发现每次点击某个&lt;code&gt;user&lt;/code&gt;的名字进入他的个人页面，再使用浏览器的返回按钮时，都会退回到&lt;code&gt;user&lt;/code&gt;列表的第一页。请问有没有办法可以记住离开列表页面时的页码？&lt;/p&gt;

&lt;p&gt;index.js.erb:&lt;/p&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nf"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;.paginator&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;html&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;&amp;lt;%= j(paginate @users, remote: true) %&amp;gt;&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nf"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;#users&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;html&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;&amp;lt;%= j(render @users) %&amp;gt;&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;index.html:&lt;/p&gt;
&lt;pre class="highlight erb"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"paginator"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="cp"&gt;&amp;lt;%=&lt;/span&gt; &lt;span class="n"&gt;paginate&lt;/span&gt; &lt;span class="vi"&gt;@users&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;remote: &lt;/span&gt;&lt;span class="kp"&gt;true&lt;/span&gt; &lt;span class="cp"&gt;%&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;ul&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"users"&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"users"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="cp"&gt;&amp;lt;%=&lt;/span&gt; &lt;span class="n"&gt;render&lt;/span&gt; &lt;span class="vi"&gt;@users&lt;/span&gt; &lt;span class="cp"&gt;%&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/ul&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;</description>
      <author>zyjisdog</author>
      <pubDate>Tue, 08 May 2018 11:44:51 +0800</pubDate>
      <link>https://ruby-china.org/topics/36719</link>
      <guid>https://ruby-china.org/topics/36719</guid>
    </item>
    <item>
      <title>有关 has_one 的一个问题</title>
      <description>&lt;p&gt;有两个 model 为 has_one 和 belongs_to 关系：&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;User&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="no"&gt;ApplicationRecord&lt;/span&gt;
  &lt;span class="n"&gt;has_one&lt;/span&gt; &lt;span class="ss"&gt;:second_review&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;dependent: :destroy&lt;/span&gt;
  &lt;span class="o"&gt;...&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;SecondReview&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="no"&gt;ApplicationRecord&lt;/span&gt;
  &lt;span class="n"&gt;belongs_to&lt;/span&gt; &lt;span class="ss"&gt;:user&lt;/span&gt;
  &lt;span class="n"&gt;validates&lt;/span&gt; &lt;span class="ss"&gt;:user_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;presence: &lt;/span&gt;&lt;span class="kp"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;uniqueness: &lt;/span&gt;&lt;span class="kp"&gt;true&lt;/span&gt;  
  &lt;span class="o"&gt;...&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;现在使用&lt;code&gt;user.create_second_review!&lt;/code&gt;来创建一条关联记录，如果&lt;code&gt;user.second_review&lt;/code&gt;已经存在的话，数据库会报错，然后删除旧的记录，但是不会插入新记录：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;2.4.0 :036 &amp;gt; user.create_second_review!
   (0.2ms)  BEGIN
  SecondReview Exists (0.3ms)  SELECT  1 AS one FROM `second_reviews` WHERE `second_reviews`.`user_id` = 2 LIMIT 1
   (0.1ms)  ROLLBACK
   (0.1ms)  BEGIN
  SQL (0.2ms)  DELETE FROM `second_reviews` WHERE `second_reviews`.`id` = 12
   (2.7ms)  COMMIT
ActiveRecord::RecordInvalid: 验证失败: User已经被使用
        from (irb):36

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如果用 &lt;code&gt;user.build_second_review.save!&lt;/code&gt;，同样会删除旧的记录，但是会插入新的记录：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;2.4.0 :038 &amp;gt; user.build_second_review.save!
   (0.2ms)  BEGIN
  SQL (0.3ms)  DELETE FROM `second_reviews` WHERE `second_reviews`.`id` = 13
   (2.8ms)  COMMIT
   (0.2ms)  BEGIN
  SecondReview Exists (0.4ms)  SELECT  1 AS one FROM `second_reviews` WHERE `second_reviews`.`user_id` = 2 LIMIT 1
  SQL (0.3ms)  INSERT INTO `second_reviews` (`user_id`, `created_at`, `updated_at`) VALUES (2, '2018-04-21 08:41:17', '2018-04-21 08:41:17')
   (2.1ms)  COMMIT
 =&amp;gt; true

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如果在 model 中去掉&lt;code&gt;dependent: :destroy&lt;/code&gt;，则不论是&lt;code&gt;create&lt;/code&gt;还是&lt;code&gt;build.save&lt;/code&gt;都不会有这种问题：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;2.4.0 :003 &amp;gt; user.create_second_review!
   (0.3ms)  BEGIN
  SecondReview Exists (0.4ms)  SELECT  1 AS one FROM `second_reviews` WHERE `second_reviews`.`user_id` = 2 LIMIT 1
   (0.1ms)  ROLLBACK
   (0.1ms)  BEGIN
  SecondReview Exists (0.4ms)  SELECT  1 AS one FROM `second_reviews` WHERE `second_reviews`.`user_id` IS NULL AND (`second_reviews`.`id` != 22) LIMIT 1
   (0.3ms)  ROLLBACK
ActiveRecord::RecordNotSaved: Failed to remove the existing associated second_review. The record failed to save after its foreign key was set to nil.
        from (irb):3
&lt;/code&gt;&lt;/pre&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;2.4.0 :004 &amp;gt; user.build_second_review.save!
   (0.4ms)  BEGIN
  SecondReview Exists (0.4ms)  SELECT  1 AS one FROM `second_reviews` WHERE `second_reviews`.`user_id` IS NULL AND (`second_reviews`.`id` != 22) LIMIT 1
   (0.1ms)  ROLLBACK
ActiveRecord::RecordNotSaved: Failed to remove the existing associated second_review. The record failed to save after its foreign key was set to nil.
        from (irb):4
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;我的问题是：
1、既然 SecondReview 类里已经有 validation，为什么&lt;code&gt;user_id&lt;/code&gt;相同的时候依然会执行数据库操作（删掉旧记录）？
2、为什么&lt;code&gt;create_second_review!&lt;/code&gt;方法在删除旧的记录后不会插入新记录？&lt;/p&gt;

&lt;p&gt;对于这个问题，如果 Rails 的机制就是这样的，是不是我就只能写诸如&lt;code&gt;@user.create_second_review! if  !@user.second_review&lt;/code&gt; 这样丑陋的代码？&lt;img title=":joy:" alt="😂" src="https://twemoji.ruby-china.com/2/svg/1f602.svg" class="twemoji"&gt; &lt;/p&gt;</description>
      <author>zyjisdog</author>
      <pubDate>Sat, 21 Apr 2018 16:44:04 +0800</pubDate>
      <link>https://ruby-china.org/topics/35502</link>
      <guid>https://ruby-china.org/topics/35502</guid>
    </item>
    <item>
      <title>有没有兼容 Turbolinks 的弹出层插件？</title>
      <description>&lt;p&gt;之前试用了 Layer，发现不能在 turbolinks 5 下很好地工作。。。&lt;/p&gt;

&lt;p&gt;现在的问题是：
1、有没有其他好用的弹出层插件？&lt;/p&gt;

&lt;p&gt;2、如果没有，是不是应该去掉 turbolinks？&lt;/p&gt;

&lt;p&gt;3、如果去掉 turbolinks，是不是有其他的替代方案？&lt;/p&gt;

&lt;p&gt;目前项目是 Rails 5.1&lt;/p&gt;</description>
      <author>zyjisdog</author>
      <pubDate>Fri, 13 Apr 2018 23:33:39 +0800</pubDate>
      <link>https://ruby-china.org/topics/35452</link>
      <guid>https://ruby-china.org/topics/35452</guid>
    </item>
    <item>
      <title>rails 4.2.0.rc1 进行 rake db:create 出错</title>
      <description>&lt;p&gt;我是新建的 app:rails new myapp -d postgresql
然后把 database.yml 里 production:username:改成了自己的用户名;
最后 rake db:create，报错:
rake aborted!
LoadError: cannot load such file -- rails-html-sanitizer
/Users/CloudL/.rvm/gems/ruby-2.1.5/gems/actionview-4.2.0.rc1/lib/action_view/helpers/sanitize_helper.rb:3:in &lt;code&gt;require'
/Users/CloudL/.rvm/gems/ruby-2.1.5/gems/actionview-4.2.0.rc1/lib/action_view/helpers/sanitize_helper.rb:3:in&lt;/code&gt;'
/Users/CloudL/.rvm/gems/ruby-2.1.5/gems/actionview-4.2.0.rc1/lib/action_view/helpers/text_helper.rb:32:in &lt;code&gt;&amp;lt;module:TextHelper&amp;gt;'
/Users/CloudL/.rvm/gems/ruby-2.1.5/gems/actionview-4.2.0.rc1/lib/action_view/helpers/text_helper.rb:29:in&lt;/code&gt;&lt;a rel="nofollow" target="_blank"&gt;module:Helpers&lt;/a&gt;'
/Users/CloudL/.rvm/gems/ruby-2.1.5/gems/actionview-4.2.0.rc1/lib/action_view/helpers/text_helper.rb:6:in &lt;code&gt;&amp;lt;module:ActionView&amp;gt;'
/Users/CloudL/.rvm/gems/ruby-2.1.5/gems/actionview-4.2.0.rc1/lib/action_view/helpers/text_helper.rb:4:in&lt;/code&gt;'
/Users/CloudL/.rvm/gems/ruby-2.1.5/gems/actionview-4.2.0.rc1/lib/action_view/helpers/form_tag_helper.rb:18:in &lt;code&gt;&amp;lt;module:FormTagHelper&amp;gt;'
/Users/CloudL/.rvm/gems/ruby-2.1.5/gems/actionview-4.2.0.rc1/lib/action_view/helpers/form_tag_helper.rb:14:in&lt;/code&gt;&lt;a rel="nofollow" target="_blank"&gt;module:Helpers&lt;/a&gt;'
/Users/CloudL/.rvm/gems/ruby-2.1.5/gems/actionview-4.2.0.rc1/lib/action_view/helpers/form_tag_helper.rb:8:in &lt;code&gt;&amp;lt;module:ActionView&amp;gt;'
/Users/CloudL/.rvm/gems/ruby-2.1.5/gems/actionview-4.2.0.rc1/lib/action_view/helpers/form_tag_helper.rb:6:in&lt;/code&gt;'
/Users/CloudL/.rvm/gems/ruby-2.1.5/gems/actionview-4.2.0.rc1/lib/action_view/helpers/form_helper.rb:4:in &lt;code&gt;require'
/Users/CloudL/.rvm/gems/ruby-2.1.5/gems/actionview-4.2.0.rc1/lib/action_view/helpers/form_helper.rb:4:in&lt;/code&gt;'
/Users/CloudL/.rvm/gems/ruby-2.1.5/gems/actionview-4.2.0.rc1/lib/action_view/helpers.rb:50:in &lt;code&gt;&amp;lt;module:Helpers&amp;gt;'
/Users/CloudL/.rvm/gems/ruby-2.1.5/gems/actionview-4.2.0.rc1/lib/action_view/helpers.rb:4:in&lt;/code&gt;&lt;a rel="nofollow" target="_blank"&gt;module:ActionView&lt;/a&gt;'
/Users/CloudL/.rvm/gems/ruby-2.1.5/gems/actionview-4.2.0.rc1/lib/action_view/helpers.rb:3:in &lt;code&gt;&amp;lt;top (required)&amp;gt;'
/Users/CloudL/.rvm/gems/ruby-2.1.5/gems/sprockets-rails-2.2.2/lib/sprockets/rails/legacy_asset_tag_helper.rb:7:in&lt;/code&gt;&lt;a rel="nofollow" target="_blank"&gt;module:LegacyAssetTagHelper&lt;/a&gt;'
/Users/CloudL/.rvm/gems/ruby-2.1.5/gems/sprockets-rails-2.2.2/lib/sprockets/rails/legacy_asset_tag_helper.rb:6:in &lt;code&gt;&amp;lt;module:Rails&amp;gt;'
/Users/CloudL/.rvm/gems/ruby-2.1.5/gems/sprockets-rails-2.2.2/lib/sprockets/rails/legacy_asset_tag_helper.rb:4:in&lt;/code&gt;&lt;a rel="nofollow" target="_blank"&gt;module:Sprockets&lt;/a&gt;'
/Users/CloudL/.rvm/gems/ruby-2.1.5/gems/sprockets-rails-2.2.2/lib/sprockets/rails/legacy_asset_tag_helper.rb:3:in &lt;code&gt;&amp;lt;top (required)&amp;gt;'
/Users/CloudL/.rvm/gems/ruby-2.1.5/gems/sprockets-rails-2.2.2/lib/sprockets/rails/helper.rb:45:in&lt;/code&gt;require'
/Users/CloudL/.rvm/gems/ruby-2.1.5/gems/sprockets-rails-2.2.2/lib/sprockets/rails/helper.rb:45:in &lt;code&gt;&amp;lt;module:Helper&amp;gt;'
/Users/CloudL/.rvm/gems/ruby-2.1.5/gems/sprockets-rails-2.2.2/lib/sprockets/rails/helper.rb:7:in&lt;/code&gt;&lt;a rel="nofollow" target="_blank"&gt;module:Rails&lt;/a&gt;'
/Users/CloudL/.rvm/gems/ruby-2.1.5/gems/sprockets-rails-2.2.2/lib/sprockets/rails/helper.rb:6:in &lt;code&gt;&amp;lt;module:Sprockets&amp;gt;'
/Users/CloudL/.rvm/gems/ruby-2.1.5/gems/sprockets-rails-2.2.2/lib/sprockets/rails/helper.rb:5:in&lt;/code&gt;'
/Users/CloudL/.rvm/gems/ruby-2.1.5/gems/sprockets-rails-2.2.2/lib/sprockets/railtie.rb:6:in &lt;code&gt;require'
/Users/CloudL/.rvm/gems/ruby-2.1.5/gems/sprockets-rails-2.2.2/lib/sprockets/railtie.rb:6:in&lt;/code&gt;'
/Users/CloudL/.rvm/gems/ruby-2.1.5/gems/sass-rails-4.0.5/lib/sass/rails/railtie.rb:1:in &lt;code&gt;require'
/Users/CloudL/.rvm/gems/ruby-2.1.5/gems/sass-rails-4.0.5/lib/sass/rails/railtie.rb:1:in&lt;/code&gt;'
/Users/CloudL/.rvm/gems/ruby-2.1.5/gems/sass-rails-4.0.5/lib/sass/rails.rb:11:in &lt;code&gt;require'
/Users/CloudL/.rvm/gems/ruby-2.1.5/gems/sass-rails-4.0.5/lib/sass/rails.rb:11:in&lt;/code&gt;'
/Users/CloudL/.rvm/gems/ruby-2.1.5/gems/sass-rails-4.0.5/lib/sass-rails.rb:1:in &lt;code&gt;require'
/Users/CloudL/.rvm/gems/ruby-2.1.5/gems/sass-rails-4.0.5/lib/sass-rails.rb:1:in&lt;/code&gt;'
/Users/CloudL/.rvm/gems/ruby-2.1.5@global/gems/bundler-1.7.9/lib/bundler/runtime.rb:76:in &lt;code&gt;require'
/Users/CloudL/.rvm/gems/ruby-2.1.5@global/gems/bundler-1.7.9/lib/bundler/runtime.rb:76:in&lt;/code&gt;block (2 levels) in require'
/Users/CloudL/.rvm/gems/ruby-2.1.5@global/gems/bundler-1.7.9/lib/bundler/runtime.rb:72:in &lt;code&gt;each'
/Users/CloudL/.rvm/gems/ruby-2.1.5@global/gems/bundler-1.7.9/lib/bundler/runtime.rb:72:in&lt;/code&gt;block in require'
/Users/CloudL/.rvm/gems/ruby-2.1.5@global/gems/bundler-1.7.9/lib/bundler/runtime.rb:61:in &lt;code&gt;each'
/Users/CloudL/.rvm/gems/ruby-2.1.5@global/gems/bundler-1.7.9/lib/bundler/runtime.rb:61:in&lt;/code&gt;require'
/Users/CloudL/.rvm/gems/ruby-2.1.5@global/gems/bundler-1.7.9/lib/bundler.rb:134:in &lt;code&gt;require'
/Users/CloudL/Documents/RailsProj/myapp/config/application.rb:7:in&lt;/code&gt;'
/Users/CloudL/Documents/RailsProj/myapp/Rakefile:4:in `'
(See full trace by running task with --trace)&lt;/p&gt;

&lt;p&gt;请问这是怎么回事....谢谢大家了:)&lt;/p&gt;</description>
      <author>zyjisdog</author>
      <pubDate>Fri, 12 Dec 2014 22:41:42 +0800</pubDate>
      <link>https://ruby-china.org/topics/23173</link>
      <guid>https://ruby-china.org/topics/23173</guid>
    </item>
  </channel>
</rss>
