私の Application Controller では、3 つの場所に Cookie を設定しています。前のフィルターで...
def set_abingo_identity
# skip bots
if request.user_agent =~ /#{@robot_regular_expression}/i
Abingo.identity = "robot"
elsif current_user
Abingo.identity = cookies[:abingo_identity] ||=
{ :value => current_user.id, :expires => 1.year.from_now }
else
Abingo.identity = cookies[:abingo_identity] ||=
{ :value => rand(10 ** 10), :expires => 1.year.from_now }
end
end
...そして2つの方法で...
def remember_visit url
20.times do |i|
# Add cookie to referrer list
name = "referrer#{i}"
if cookies[name].blank?
cookies[name] = {:value => url, :expires => Time.now + 1.year }
break
elsif cookies[name] == url
break # skip
end
end
end
...そしてこれ...
def set_referral_cookie val
ref_name = "referral_id"
offer_name = "offer_id"
cur = cookies[ref_name]
offer = cookies[offer_name]
affiliate = Affiliate.find_by_name val
if cur.blank? || offer.blank?
if affiliate
if cur.blank?
cookies[ref_name] = { :value => affiliate.id.to_s, :expires => Time.now + 1.year }
end
if offer.blank? && affiliate.offer? && !affiliate.expired?
cookies[offer_name] = { :value => affiliate.id.to_s, :expires => Time.now + 1.year }
end
end
end
return affiliate
end
デバッガーでステップスルーすると、before フィルターcookies["abingo_identity"]
が設定されていることがわかります。次に、remember_visit() で と の両方cookies["referrer0"]
が設定され、次に set_referral_cookie() で 3 つすべてが設定されます。
しかし、機能テストに戻ると、cookies["abingo_identity"]
設定されているだけです。
cookies["abingo_identity"] の部分が新しくなり、コメントアウトすると他の Cookie が残ります。
このコードの何が問題になっていますか?
更新: それらは削除されませんが、すべてがテスト ケースの @response.cookies にコピーされるわけではありません