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

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

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

 



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

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

在我的routes.rb我有

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

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

它不起作用的原因是因为您的字段都命名为: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收到的参数匹配。 此外,当您发布表单时,请务必查看服务器日志以查看参数! 🙂

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

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

 rails g scaffold GeoLocation longitude:string latitude:string 

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

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

  • Ruby书
  • Rails 4 Way