在控制器中存储用户输入值

时间:2015-04-05 20:16:21

标签: ruby-on-rails ruby

我有一个名为Welcome的控制器,其视图名为index。

在我的索引视图中,我已经创建了一个小表单。

<%= form_for :location do |f| %>

    <%= f.label :Longitude %><br>

    <%= f.text_field :integer %>
    <br>
    <br>
    <%= f.label :Latitude %><br>
    <%= f.text_field :integer %>


  <p>
    <%= f.submit %>
  </p>
<% end %>

在此表单中,用户可以为经度和纬度输入一些整数值。一旦用户输入经度和纬度的值。他们点击提交。提交后,我想将这些值存储在我的控制器中。所以我使用以下方法,其中有两个实例变量从表单中获取值。

def index
    @long = params[:longitude]
    @lat = params[:latitude]
  end

在我的routes.rb中我有

get 'welcome/index'
  post 'welcome/index'

请告诉我哪里出错了。此外,如果有人可以建议一个更好的方式这样做,我会很感激,我是铁杆新手,我想学习正确的做事方式,所以我不会在早期创造坏习惯。

2 个答案:

答案 0 :(得分:2)

在阅读完问题之后,我想你想看看控制器,视图和模型是如何工作的。出于学习目的,您可以生成脚手架并研究生成的代码。

例如,通过以下方式生成模型GeoLocation,相关控制器和视图:

rails g scaffold GeoLocation longitude:string latitude:string

现在启动rails服务器并浏览http://localhost:3000/geo_locations/new并保存你的long,lat。我写了这个答案给你一些指导。

你可以关注这些优秀的书籍:

  • Ruby书
  • The Rails 4 Way

答案 1 :(得分:2)

它无效的原因是因为您的字段都被命名为:integer,并且由于它们共享相同的名称,因此浏览器只会发送一个值。

因此,使用您的代码,如果您使用'a'填充第一个字段而使用'b'填充第二个字段,那么您的参数将包含以下内容:

{ location: { integer: "aaa" } }

这显然不是你想要的!如果您的HTML看起来更像这样(我已经删除了布局内容以使事情变得更清晰):

<%= form_for :location do |f| %>
  <%= f.label :longitude %>
  <%= f.text_field :longitude %>

  <%= f.label :latitude %>
  <%= f.text_field :latitude %>

  <%= f.submit %>
<% end %>

然后,您可以访问控制器params[:location][:longitude]params[:location][:latitude]

中的参数

一个好主意,看看你的表单与这个表单的效果之间的区别是检查html。查看input名称属性和label属性,看看它们如何与Rails收到的参数匹配。此外,当您发布表单时,请务必查看服务器日志以查看参数! :)