Ruby on Rails Tuesday, October 21, 2014


On 2014-Oct-21, at 16:54 , Dominic Monaco <jarvis345@gmail.com> wrote:

Hey guys I'm completely lost at this point I'm trying to make a simple app that takes an input in the form of a string ("City, State") and sends that string to the google_places gem to do spot_by_query("gas station near #{enter value from input}")

Then I need the 1st 10 results and be able to print out their names.  I have become completely lost in my attempts and was looking for some advice. 

Here is my controller
class LocationsController < ApplicationController
  before_action :set_location, only: [:show, :edit, :update, :destroy]

  # GET /locations
  # GET /locations.json
  def index
    @location = Location.new
  end

  # GET /locations/1
  # GET /locations/1.json
  def show

  end

  # GET /locations/new
  def new

  end

  # POST /locations
  # POST /locations.json
  def create
    @client = GooglePlaces::Client.new('################')

    @shops = @client.spots_by_query('coffee near #{@location(params[:address])}')
    @result = JSON.parse(@shops[1])
    # @location.find_closest_shops(@location.params[: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


Here is the input form
<%= form_for @location do |f| %>
  <%= f.label :address %>
  <%= f.text_field :address, :placeholder => "City State" %>
  <br>
  <%= f.submit "Find Coffee!" %>
<% end %>

Here is the output form (this is where I'm lost)
<%= print "#{@result['name']}" %>


Well, after making a few assumptions:
  • you are going to a URL that gets routed to the index action like /locations
  • the form posts to /locations

In your create action, you probably need to replace:
    @shops = @client.spots_by_query('coffee near #{@location(params[:address])}')
With:
    @shops = @client.spots_by_query("coffee near #{location_params[:location][:address])}")
Noting that you won't have an @location set (it will be nil because all instance variables are nil by default).
You need to actually get the params which will look something like: { location: { address: "entered value" } }
You can probably see this in the development.log.
In Ruby, single-quoted strings do not do interpolation. Thus:
here = "Cincinnati"

puts 'coffee near #{here}'
coffee near #{here}

but:
puts "coffee near #{here}"
coffee near Cincinnati

so that should get you going again.

-Rob

No comments:

Post a Comment