2010-10-14 67 views
4

我注意到,我的控制器的“指数”行动被称为两次。控制器动作被调用两次

行动有以下结构:“/物品标签=标签1,标签2”

def index 

    if params[:tags].nil? 
    # [fork #1] just return the whole collection of model 
    @items = Item.all 
    else 
    # [fork #2] filter items by tags 
    @items = Item.select_by_tags params[:tags] 
    end 

    # Another operations with @items 
    # The result will be incorrect, because, when tags in params are specified, 
    # controller action will be first executed for fork #2, and then for fork #1. 
    # In view, i get @items from fork #2 and result of THIS piece of code for fork #1 
end 

在页面上我有网址链接一样,点击它们,我得到“指数”行动,叫了两声

我不知道,为什么出现这种情况?

+0

什么是你有,这是被称为两次证据? – 2010-10-14 05:39:29

+0

我们可以看到开发日志吗? – Eimantas 2010-10-14 05:45:26

+0

谢谢。我已经知道了。我在场景后面进行了AJAX调用,这是在页面加载后执行的。 – AntonAL 2010-10-14 05:58:21

回答

5

我已经想通了。

这种行为的原因是一个JavaScript代码,页面加载后调用。这段代码实现了页面某些部分的深层链接。

注意此点。

谢谢。

+0

嗨,我注意到相同的行为,我的控制器操作将一些数据保存到数据库,我的视图上的JavaScript代码调用此操作两次,导致在数据库中创建2条记录。当我在视图中注释掉

0

我面临着类似的问题,在我们的情况下,它是与产生一个额外的请求(即一个额外的普通HTML请求)如果pjax没有在6S完整超时6S违规pjax代码。