Rails 3,无需表单即可保存数据

时间:2014-01-05 01:51:26

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

如何将我的网站http://yocoro.com/public中的信息保存到我的数据库中? 只需转到页面

PS:我正在使用2个宝石地理编码器和用户代理来获取这些信息。

//controller
class PublicController < ApplicationController  
  def index  
      @time = Time.now  
      @user_agent = request.env['HTTP_USER_AGENT']  
  end  
end

//view
<%= request.ip %>
<%= request.location.city %>  
<%= request.location.country_code %>  
<%= @user_agent %>

2 个答案:

答案 0 :(得分:0)

最基本的是,Rails允许您将各个HTTP路径映射到特定控制器中的特定方法:

get '/record_ip' => 'public#index'

这将匹配以/record_ip开头的任何网址,并使用indexPublicController方法中该请求中的参数。

index内,您可以通过模型访问数据库,从而做任何您想做的事情(当然,您也可以通过系统上的Ruby做任何您想做的事情。)当你'完成后,您需要使用respond_torender来决定要生成的输出。如果您没有明确调用render,Rails将搜索与控制器和方法名称对应的模板,这可能不是您想要的:

def index
  // Do something to the database
  // Your query parameters sent via a GET requests will be in the params hash

  respond_to do |format|
    format.json { render json: {'status' => "success"} }
  end
end

现在您可以发出类似http://yourserver.com/matchip?param1=val1的HTTP GET请求。请注意,Rails不需要您拥有模型 - 实际上您可以使用SQL库执行所有数据库操作。

当然,这只是Rails路由和响应的最简单方面。在这个小提示下面有一个巨大的冰山供你探索。如果这就是你所做的一切,也许Rails对你来说太过分了?只需使用自定义PHP脚本,您就可以非常简单地操作数据库。

答案 1 :(得分:0)

根据@meager的输入,我可以减少这种方式。

创建一个模型和适当的表来使用它

rails generate model location ip:text city:text country:text user_agent:text

然后在您的索引操作中将信息放在一起并存储它:

def index
  @ip = ip_param
  # Here is where you use the IP address and the geocoder gem to gather the 
  # info from the ip address. Then create the location object and save it.
  @location = Location.new
  @location.ip = @ip
  @location.city = city
  @location.country = country
  @location.user_agent = request.env['HTTP_USER_AGENT']
  @location.save
end

这是我最终如何做到的.. 我尝试了之前它没有工作,但我终于理解为什么,我的旧代码了 “@location = location.new”字母-l-是小写的,并且在我改为“@location = Location.new”bingo bango之后,导轨给我一个错误!!!。

非常感谢大家。!!!

  @location = Location.new
  @location.ip = request.ip
  @location.city = request.location.city
  @location.country = request.location.country_code
  @location.user_agent = request.env['HTTP_USER_AGENT']

  if @location.save
    flash[:notice] = 'Location save'
  else
    flash[:notice] = 'Location did not save' 
  end