0

这让我大吃一惊,发生了很多事情,我只需要在这里寻求帮助。

现在,我有一个资源列表。在每个资源中,它允许某人通过单击链接将其“添加为收藏”。我让它与正常重定向一起工作,但至于集成 ajax 以便他们可以在不刷新页面的情况下进行收藏,我完全迷失了......

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

收藏夹控制器(更新是此控制器中的唯一操作)

  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;
  });
4

2 回答 2

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)

于 2012-05-12T01:00:03.817 回答
1

我建议从这个 Railscast 开始,了解基本的 JQuery 和 Ajax 处理。它有点过时了,但仍然相当扎实,将为您提供入门的基础知识。

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

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

祝你好运!

于 2012-05-12T00:49:52.557 回答