Rails Rails 5.2 使用 gem action-store 后,怎么禁止在点击 “收藏” 按钮的时候,不更新时间?

Sylor-huang · August 17, 2018 · Last by jonnoj replied at August 17, 2018 · 1349 hits

我的Gemfiles是:


gem 'rails', '~> 5.2'
gem 'action-store'

其中收藏的 action

# questions_controller.rb
def star
    current_user.star_question(params[:id])
    render plain: "1"
  end

用户的模型user.rb:

action_store :star, :question, counter_cache: true, user_counter_cache: true 

现在每次点击 "收藏" 按钮,Questionupdated_at 这个时间会发生变化,怎么才能禁止 updated_at 改变呢?

谢谢大家。

试试在star_question方法里 save 的时候写成这样 xxx.save(touch: false)

@jonnoj 谢谢你的回答,这个方法试过了呢,但是用:

def star
   current_user.star_question(params[:id])
  @question.save(touch: false)

   # 或者 @question.stars_count.save(touch: false)
   render plain: "1"
 end

这都没效果呢。

补充:收藏功能是 ajax 实现的:(参考 homeland 里面的)

$(function () {
    var s = $(".ques-head-footer a.bookmark");
    s.on("click",function (e) {
        e.preventDefault();
        var target_id = s.data("id"),
            target_c = $("span.stars_counts",s) ,
            target_n = target_c.text();
        if (s.hasClass("like")) {
            $.ajax({
                url: "/questions/" + target_id  + "/unstar",
                type: "DELETE",
            });
            s.attr("title", "收藏").removeClass("like");
            $("span.target_name",s).html("收藏");
            target_c.text(parseInt(target_n) - 1);
        }
        else{
            $.post ({
                url: "/questions/" + target_id + "/star",
            });
            s.attr("title","已收藏").addClass("like");
            $("span.target_name",s).html("已收藏");
            target_c.text(parseInt(target_n) + 1);
        }
    });
});
Reply to Sylor-huang

save 方法不应该是在 star_question里做的吗,怎么放到下一行了?

You need to Sign in before reply, if you don't have an account, please Sign up first.