简短版:
如果我有
.favorite-link
= link_to some_path, class: (@condition ? "favorited" : "") do
.star-image
的routes.rb
resources :hacks do
post "favorite", on: :member
end
hacks_controller.rb
def favorite
@favorite = Favorite.find_or_initialize_by(user_id: current_user.id, hack_id: params[:id])
if @favorite.persisted?
@favorite.destroy
respond_to do |format|
format.js
end
else
@favorite.save
respond_to do |format|
format.js
end
end
end
favorite.js.coffee
$('.favorite-link a').toggleClass("favorited")
这最后一段代码改变了每个实例。如何切换我点击的那个?做`.on'点击', - > $(this).toggleClass(" favited")做了奇怪的事情,比如每隔一次我点击它就改变它。另外,渲染js不适合这种方式。
或许更好地切换类值的方法是:如何使用ajax切换星标(即在点击链接后再次使页面评估@condition
?)
与问题的核心无关,但仅供参考:
SCSS
.favorite-link {
a.favorited {
.star-image {
background-image: url('star-on.png');
}
}
.favorite-link {
a {
.star-image {
background-image: url('star-off.png');
}
}
}
答案 0 :(得分:1)
使用jQuery将类添加为Ajax响应处理程序的一部分:
$(".star-image").addClass("favorited");
还有.toggleClass
和.removeClass
来填写您的实施内容。