Huy
Huy

Reputation: 11206

Passing Ajax Parameters to Rails Controller

I am trying to pass some parameters from my view via an AJAX call to a custom method fetch_info in my photos controller. My controller does not seem to be receiving the parameters. When I click on an image to initiate the AJAX call, I see the following in my terminal:

Processing by PhotosController#fetch_info as JSON
  Parameters: {"id"=>"", "secret"=>""}
Completed 500 Internal Server Error in 267ms

FlickRaw::FailedResponse ('flickr.photos.getInfo' - Photo not found):
  app/controllers/photos_controller.rb:38:in `fetch_info'

It looks like the fetch_info method is being called, but the parameters are empty. How should I be passing in my parameters through AJAX?

Here is my view. I also have my javascript in the view for the purpose of just getting this to work.

index.html.erb

<div class="body_container">

    <div id="photos_container">
    <% @photos_array.each do |p| %>

     <%= link_to '#' do %>
       <div class='each_photo_container', id='<%="#{p[:id]}"%>' >
         <%= image_tag p[:s_url] %>
       </div>
     <% end %>

    <!-- Load Modal onClick -->
    <script type="text/javascript">
    jQuery(function() {
     $('#<%=p[:id]%>').click(function (e) {

        //ajax call to fetch photo info
        var fetch_id = '<%=p[:id]%>';
        var fetch_secret = '<%=p[:secret]%>';

        $.ajax({
          type: 'GET',
          url: '/photos/fetch_info',
          dataType: 'json',
          data: { 'id' : fetch_id.val(), 'secret' : fetch_secret.val() } 
        });

        return false;
      });
    });

    </script>

    <% end %>

    <div class="basic_modal">
    </div>

 </div>
</div>

Here is my photos_controller.rb:

  def fetch_info
    puts params[:id]
    puts params[:secret]

    info = flickr.photos.getInfo(:photo_id => params[:id], :secret=> params[:secret])


  end

Upvotes: 1

Views: 8214

Answers (1)

Mohamed Yakout
Mohamed Yakout

Reputation: 3036

You can use this code:

$('##{p[:id]}').click(function (e) {

    //ajax call to fetch photo info
    var fetch_id = '#{p[:id]}';
    var fetch_secret = '#{p[:secret]}';

    $.ajax({
      type: 'GET',
      url: '/photos/fetch_info',
      dataType: 'json',
      data: { 'id' : fetch_id, 'secret' : fetch_secret } 
    });

    return false;
  })

Upvotes: 2

Related Questions