有没有办法让Rails控制器中的访客城市和国家?

时间:2013-11-27 14:12:26

标签: ruby-on-rails ruby-on-rails-4 rails-geocoder

在我目前的应用程序中,我使用Geocoder gem来获取访客的城市和国家。我在视图中使用隐藏字段来获取这些细节。提交登录表单后,这些详细信息将发送到控制器,控制器将把它们保存到数据库中。当我尝试使用

直接从控制器获取这些细节时
 request.location.city

它将为数据库分配一个空白值。如果我在视图中使用隐藏字段,有人可以正确使用它们吗?那么,我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

您应该在呈现任何内容之前存储访问者信息:

class UsersController
  def new
    # I suspect that, for fast insert, you should probably use a NoSQL database
    # to perform `store!` or even just write it to a log file
    Visitor.store!(:city => request.location.city, :ip => request.ip)
  end

  def create
    @user = User.build(params[:user].merge(:city => request.location.city))
    if @user.valid?
      @user.save
      flash[:notice] = "You've been registered!"
      redirect_to user_dashboard_path
    else
      flash[:notice] = "Couldn't register your account"
      render action: "new"
    end
  end
end