Rails 4 w / Geocoder在表单提交期间获取IP地址

时间:2014-09-09 19:14:05

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

我已经安装了Geocoder Gem,当用户提交表单时,我想使用他们的IP地址自动将他们的lat / lon提交到我的数据库。我很难找到这方面的教程。我发现的一切都是使用c / s / c提交或尝试使用IP地址查找距离,这不是我想要的。最后,我想使用lat / lon并使用它们来显示用户在用户个人资料和Google地图上提交表单时的位置,但现在我只想保存它们。

通过以下设置,我收到此错误:

NoMethodError in AnswersController#create
undefined method `ip_address' for #<Answer:0x007fc1cd589968>

这是我的表格:

<%= form_for [@daily, @answer] do |answer| %>
  <%= answer.label :answer, "" %>
  <%= answer.text_area :answer %><br>

  <%= answer.label :tags, "Tags (separate by commas, use '-' with multi-word tags"%>
  <%= answer.text_field :tag_list %><br>

  <%= answer.submit %>
<% end %>

这是我的答案控制器:

  def new
    @daily = Question.find_by(show_month: Time.now.month, show_day: Time.now.day)
    @answer = Answer.new
  end

  def create
    @question = Question.find(params[:question_id])
    @answer = Answer.new( answer_params )
    @answer.user_id = current_user.id
    @answer.question_id = @question.id
    if @answer.save
      redirect_to @question
    else
      render 'new'
    end
  end

  def answer_params
    params.require(:answer).permit(:answer, :user_id, :question_id, :tag_list, :latitude, :longitude)
  end

我的回答模式:

class Answer < ActiveRecord::Base
  belongs_to :question
  belongs_to :user
  acts_as_taggable
  geocoded_by :ip_address
  after_validation :geocode
end

我还发现在开发过程中使用这个辅助方法(因为localhost不会提供IP)

def location
  if params[:location].blank?
    if Rails.env.test? || Rails.env.development?
      @location ||= Geocoder.search("50.78.167.161").first
    else
      @location ||= request.location
    end
  else
    params[:location].each {|l| l = l.to_i } if params[:location].is_a? Array
    @location ||= Geocoder.search(params[:location]).first
    @location
  end
end

我想我需要添加

result = request.location

但我不知道在哪里。我尝试将它添加到AnswersController但是没有用。

谢谢!

0 个答案:

没有答案