我的应用程序从一个表单开始,将一个字符串作为您的位置,点击提交后,它应该将此字符串传递给一个gem-api调用,该调用将返回一个json数组然后我解析并显示。我遇到的问题是单击提交将实例变量保留为零。Ruby on Rails实例变量没有通过表单的提交设置
这里是你的第一页上看到的形式:
<%= form_for @location do |f| %>
<%= f.label :address %>
<%= f.text_field :address, :placeholder => "City State" %>
<br>
<%= f.submit "Find Coffee!" %>
<% end %>
这里是控制器的代码:
class LocationsController < ApplicationController
before_action :set_location, only: [:show, :edit, :update, :destroy]
# GET /locations
# GET /locations.json
def index
@location = Location.new
end
# POST /locations
# POST /locations.json
def create
@shops = []
@client = GooglePlaces::Client.new('###API KEY####')
@shops = @client.spots_by_query('coffee near ' + @location.address)
end
private
# Never trust parameters from the scary internet, only allow the white list through.
def location_params
params.require(:location).permit(:address)
end
end
所以会发生什么,当我填写表格,然后点击提交是我得到一个未定义的方法@ location.address为零,当我在rails控制台中设置它时,它的工作原理与我想要的一样,只是获取@location = Location.new然后将地址传递给它。我错过了什么?
服用点要考虑的是,你可以使用@@变量,而不是@variable然而,这是很少正确的解决方案集一流水平的变量。 Brians回答如下是在这种情况下做事的正确方法。 – 2014-10-22 04:01:55