2010-10-07 126 views
0

我有这个相当简单的Ruby on Rails应用程序:两个模型ListsItemsLists有许多ItemsItems属于Lists。好。jQuery跨Ruby on Rails模型

show方法ListsController用属于给定列表的项目列表(在部分lists/_listOfItems.html.erb中)打印页面。在show.html.erb视图的末尾,有一个表单可以让用户将一个项目添加到列表中。在标准(没有jQuery)RoR中,这是完美的。

现在,我想要做的就是让用户在不重新加载页面的情况下将项目添加到列表中。我已经与jQuery管理,将项目添加到数据库,但现在我的问题是刷新HTML列表,而无需重新加载页面。我设法有一个create.js.erbItemsController执行,我可以让事情看起来与它在网页上,但问题是,这create.js.erb生活ItemsController,而不是在ListsController这样,如果我试图让create.js.erb呈现局部_listOfItems.html.erb,它会因为create.js.erb住在ItemsController中,因此无法访问ListsControllershow方法中定义的变量。

我想如果我使用index方法ItemsController来显示项目列表,因为一切都会生活在那里,但这可能会产生更多的复杂性,它会像一个魅力。

我希望这很清楚。你可以帮我吗?非常感谢你!

回答

0

如果我的理解对不对,我认为解决的办法是在javascript +在你的控制器动作:

您的放映视图应该有一个Ajax调用如下,这应该通过点击/改变触发/ ... jQuery的功能,例如:$(“选择”)变化(函数(){这里的Ajax调用被置于})

$.ajax({ 
    type: 'get', 
    url: "/ajax/somepageofyourown", 
    async: false, 
    data: { add here any variables your controller method would need }, 
    success: function(r) { 
     $(' the selector that needs to be replaced ').html(r); 
    } 
    }); 

补充说,这Ajax调用你的路线,让您的控制器对应的网址

添加你的控制器动作,它应该触发呈现您想要替换以前的HTML的HTML。

+0

嗨,谢谢你的回复。我想我应该提到我正在使用jQuery表单插件,我相信这些插件正在照顾所有的ajax调用。我会试着弄清楚如何去做。 – 2010-10-07 14:54:18