我已经安装了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但是没有用。
谢谢!