【发布时间】:2014-02-25 16:08:38
【问题描述】:
当我尝试在远程操作中设置 cookie 时,它的设置不正确。
阿贾克斯:
控制器/故事:
def vote
unless cookies[params[:story_id]]
@story = Story.find(params[:story_id])
@story.rating += 1
@story.save
cookies[params[:story_id]] = true
end
end
观点/故事:
<% unless cookies[story.id] %>
<%= link_to "▲", story_vote_path(story), :remote => true, :method => "put", class: :vote %>
<% end %>
非 ajax:
控制器/故事:
def vote
unless cookies[params[:story_id]]
@story = Story.find(params[:story_id])
@story.rating += 1
@story.save
cookies[params[:story_id]] = true
end
redirect_to root_url
end
观点/故事:
<% unless cookies[story.id] %>
<%= link_to "▲", story_vote_path(story), :method => "put", class: :vote %>
<% end %>
在之前的代码中,无论链接是否被点击,它仍然会出现并且可以用来再次投票。但是在后者中,链接不再出现,您不能再次投票。 我看了看,发现set_cookie头可以从ajax调用中发回,我哪里出错了?
【问题讨论】:
-
ajax 请求中的投票操作后呈现的视图是什么?你需要一个js来隐藏链接
-
我明白这一点。然而,在重新加载后,链接仍然出现,除非 cookies[story.id] 应该阻止。
-
仅供参考 Ruby 不支持这一行:
@story.rating += 1- 你必须使用@story.rating = @story.rating + 1 -
我不确定它是否有效,所以我尝试了,它确实增加了计数器。
标签: ruby-on-rails ajax cookies