我有一个名为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'
请告诉我哪里出错了。此外,如果有人可以建议一个更好的方式这样做,我会很感激,我是铁杆新手,我想学习正确的做事方式,所以我不会在早期创造坏习惯。
答案 0 :(得分:2)
在阅读完问题之后,我想你想看看控制器,视图和模型是如何工作的。出于学习目的,您可以生成脚手架并研究生成的代码。
例如,通过以下方式生成模型GeoLocation,相关控制器和视图:
rails g scaffold GeoLocation longitude:string latitude:string
现在启动rails服务器并浏览http://localhost:3000/geo_locations/new并保存你的long,lat。我写了这个答案给你一些指导。
你可以关注这些优秀的书籍:
答案 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收到的参数匹配。此外,当您发布表单时,请务必查看服务器日志以查看参数! :)