【问题标题】:Adding AJAX 'add to favorite' to this controller?向此控制器添加 AJAX '添加到收藏夹'?
【发布时间】:2012-05-20 13:40:09
【问题描述】:

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

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

  1. 现在我将它作为一个“放置”操作,它似乎适用于 CRUD '更新'

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

【问题讨论】:

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


    【解决方案1】:

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

    查看(使用 jQuery 的 put 宏):

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

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

    【讨论】:

    • 谢谢,我想我明白了。我是否需要使用 respond_to 更新我的控制器?
    • 不,您的默认 HTML 格式就可以了。您的控制器将重定向到将呈现页面的根 url,但 AJAX 会忽略所有这些。如果你想避免网络攻击,我想你可以有不同的respond_to |format|
    • 感谢您的帮助 :) 如果您不介意,我有一些超级简短的说明。我相信你的第二种方法。到目前为止,我设置了一个 JS 函数来捕获收藏夹链接上的点击事件。在里面我有$.put('/favorites/') 但是我如何传递当前的ID?我是否必须使用数据属性之类的东西,读取它并将其插入到请求中?
    • $.put('/favorites/' + $(this).attr('foo')) 之类的东西应该这样做。
    • 我用我的 JS 更新了我的原始帖子。这是一个愚蠢的问题,但是......它仍然正常重定向。当我尝试使用 link_to_function 时,它也这样做了。虽然它看起来很简短,但我看到“put 没有方法错误”
    【解决方案2】:

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

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

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

    祝你好运!

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-08
    相关资源
    最近更新 更多