在控制器中存储用户输入值
我有一个名为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