Rails 3:调用操作但不离开/刷新当前页面的链接?

Der*_*rek 5 ruby-on-rails

Rails 3中是否有一种方法可以调用操作(与数据库一起使用)而无需刷新或运行操作,然后重定向到当前页面?

我试图搞乱:remote => truelink_to,但它并没有为我工作.或许我误解了它的目的......或者我错误地使用它.

mli*_*elt 6

从Rails3中的视图调用操作时,通常有2种情况:

  1. 使用法线link_to及其变化.
  2. 使用link_to可选参数:remote => true(默认为false)

所述第一一个结果在正常请求/响应循环:

  1. 在控制器中调用操作.
  2. 如果没有任何特殊的(renderredirect),只需渲染与该操作相关的视图.因此,如果调用该操作do_db_stuff,Rails3会尝试do_db_stuff.html.erg在相关的视图目录中呈现(或do_db_stuff.html.haml`).
  3. 您可以通过明确调用renderredirect在操作结束时更改它:
    • render:使用控制器的当前状态呈现您命名的模板.
    • redirect:重定向到(此控制器或另一个控制器)的新操作,然后使用相关模板进行渲染.

这例如在create操作中调用一些save方法时会失败,然后通过调用返回到同一页面render :action => "new" # doen't execute the method

第二一个只是调用的动作,并将结果返回到该页面.页面的责任是如何处理这个问题.在一个稍微不同的场景中,我在我的应用程序中有一些类似的东西:

  1. 在视图的左侧,有一个任务列表.
  2. 对于每个任务项,都注册了一个在search_task控制器上调用(通过使用带有AJAX的JavaScript)的单击处理程序.
  3. 控制器通过发送render :partial ...回叫结果来响应该呼叫.
  4. 处理程序中的JavaScript函数已注册成功函数,如下所示:

    element.bind('click', function() {
        $('#left').children().removeClass('selected')
        element.addClass('selected');
        $.ajax({url: '/tasks/search_task/' + task_id, 
            async: false,
            dataType: 'html',
            success: function(data) {
                target.html(data);
            }});
    }
    
    Run Code Online (Sandbox Code Playgroud)

    (在这里附加了整个点击功能)

  5. 因此,结果(成功发送时)将导致内容target将被替换为发送的HTML代码.

我不知道是否有类似的东西link_to,也许有一个选择.

所以是的,:remote => true如果您只想忽略结果,应该适合您.