我有一个Deals Rails应用程序,显示主页上的产品列表。
交易具有deal_country属性。
我的目标:我想应用一个过滤器来过滤显示给那些deal.deal_country与用户所在国家/地区相同的交易清单(通过ip检测获得)
我尝试了以下但不起作用:
class StaticPagesController < ApplicationController
before_filter :filter_deals_based_on_visitor_country,
:only => [ :home]
def filter_deals_based_on_visitor_country
visitor_country = request.location.country
@deal = Deal.find_by(:deal_country => visitor_country)
end
def home
@deals = Deal.featured_on_homepage.to_a # deals that are now active given their start date
respond_to do |format|
format.html # home.html.erb
format.json { render json: @deals }
format.xml { render :xml => @deals }
# format.atom
end
end
end
我没有收到任何错误,但它不是“过滤”/显示基于用户所在国家/地区的交易。它没有什么不同,好像我没有放置任何超过前过滤器。方法
我该怎么做?
修改
为了确保它不起作用,我已经在美国创建了与deal.deal_country = US的交易。但在本地,我被视为处于FRance状态,我仍然可以看到它。 注意:通过这样做,我已经在本地/开发模式下使用我的法语IP(我确信它不会因为我放入主页视图:&lt;%= Geocoder.search(request.remote_ip).first。 country%&gt;它显示法国)
在application_controller.rb
中def lookup_ip_location
if Rails.env.development?
Geocoder.search(request.remote_ip).first
else
request.location
end
end
在config / envrionment / development.rb
中class ActionDispatch::Request
def remote_ip
"84.34.156.155" # fake ip for example
end
end
模型/ deal.rb
scope :featured_on_hp, lambda { default.where('date_launch_date <= ? AND date_end_date >= ?', Time.zone.now, Time.zone.now).where(featured: true) }
答案 0 :(得分:0)
你在!
忘了def filter_deals_based_on_visitor_country
,所以不会被调用。
即使你纠正了这个错误,你也会在这一行中出现错误
@deal = Deal(:deal_country => visitor_country)
正确的语法是
@deal = Deal.find_by(:deal_country => visitor_country)