2014-10-22 41 views
0

我的应用程序从一个表单开始,将一个字符串作为您的位置,点击提交后,它应该将此字符串传递给一个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然后将地址传递给它。我错过了什么?

+0

服用点要考虑的是,你可以使用@@变量,而不是@variable然而,这是很少正确的解决方案集一流水平的变量。 Brians回答如下是在这种情况下做事的正确方法。 – 2014-10-22 04:01:55

回答

0

您在一个动作中定义的变量不会在另一个动作中定义。他们是完全不同的记忆块。

def create 
    @shops = [] 
    @client = GooglePlaces::Client.new('###API KEY####') 
    @shops = @client.spots_by_query('coffee near ' + @location.address) 
    end 

应该

def create 

    @shops = [] 
    @location = Location.create(location_params) 
    @client = GooglePlaces::Client.new('###API KEY####') 
    @shops = @client.spots_by_query('coffee near ' + @location.address) 
    end 
+0

非常感谢! – Dom 2014-10-22 03:32:23

相关问题