添加AJAX'添加到收藏夹'到这个控制器?

时间:2012-05-12 00:43:19

标签: ruby-on-rails ruby ajax ruby-on-rails-3 ruby-on-rails-3.1

这让我大吃一惊,而且还有很多事情需要我在这里寻求帮助。

现在,我有一份资源清单。在每个资源中,它允许某人通过单击链接“将其添加为收藏”。我有正常的重定向工作,但至于集成ajax所以他们可以喜欢没有页面刷新,我完全失去了...

  1. 现在我将它作为CRUD'update'
  2. 的“put”动作

    FavoritesController(更新是此控制器中的唯一操作)

      def update
    
        @favorite = Favorite.find_or_initialize_by_resource_id_and_user_id(params[:id], current_user.id)
    
        if @favorite.persisted?
          @favorite.destroy
        else
           if @favorite.valid?
              @favorite.save
           end
        end
    
        redirect_to root_url
      end
    

    我的观点:

    <%= link_to "", favorites_path(:id => resource.id), :class => "star#{star_post?(resource)}", :method => "put" %>
    

    我的路线:

      resource :favorites, :only => [:update]
    

    我的JS:

      $('.res-list .star').click(function(){
        $.put('/favorites/?id=' + $(this).attr('data-id'));
        return false;
      });
    

2 个答案:

答案 0 :(得分:5)

有几种方法可以做到这一点。您可以使用link_to_function通过javascript方法传递(如果您在视图或application.js中定义了自定义的方法,您甚至可以传递自定义方法)。在此方法中,您可以设置AJAX调用以执行更新操作。

查看(使用jQuery的put宏):

<%= link_to_function "AJAX Link", "$.put('/favorites/#{resource.id}');" %>

另一种方法是为链接添加一个HTML选择器。同样,您需要编写一些js来执行更新操作。我倾向于喜欢这种方式,因为我喜欢使用按钮而不是<a href="#">标签。 (虽然说实话,我最后只是创建一个button_to_function方法来调用content_tag(:button)而不是content_tag(:a)

答案 1 :(得分:1)

我建议从基于JQuery和Ajax处理的Railscast开始。它有点陈旧,但仍然非常稳固,它将为您提供基础知识,帮助您入门。

http://railscasts.com/episodes/136-jquery

它将让您了解如何将ajax调用附加到页面上的元素,处理请求处理并制作基本的javascript视图部分,以便为用户更新表单。

祝你好运!