2011-05-23 77 views
0

正在寻找一种方法来实现从jquery中对rails方法的调用,但不需要渲染任何东西,只需在后台。从jquery调用的rails函数

这个想法是,我有一个选择标记与多选启用,我的模型有一个布尔字段称为积极,当一个元素被选中,积极将被设置为true,否则为false。

在我的application.js

我有这样的:

$(".multiselect").change(function() { 
    $("option", this).each(function() { 
     if(this.selected) { 
      // do true for checked 
     } else { 
      // do false for unchecked 
     } 
    } 
}); 

此功能工作正常,但我被困在两个部分,我知道我可以从(本)获取对象的ID .VAL (),但我应该在哪里可以找到它并更改活动字段的函数?在控制器或模型中?介意我不需要渲染任何东西,只是在后台做事。

其次,我如何从我的jquery中调用这个函数?

任何帮助,非常感谢!

回答

0

您可以在每次触发更改事件时提交表单。这将被映射到控制器中的一个函数,该函数不会呈现任何内容。

你可以做这样的事情

在你的application.js

$(".multiselect").change(function() { 
    $("option", this).each(function() { 
    if(this.selected) { 
     // do true for checked 
    } else { 
     // do false for unchecked 
    } 
    } 
    //submitting form after doing stuff 
    $.post($(this).parent("form") ....); 
}); 

在你的控制器,你可能会映射它的“更新”方法

def update 
    # logic to update active attribute of model 
    render :nothing => true 
end 
+0

非常感谢。这不在表格内(至少现在不行)。所以如果我有一个更新方法,我应该把这样的东西:def update @foo = Foo.find(params [:id])@ foo.active = true/false结束?但我怎么会不使用窗体从js调用这个函数?我可以说$ .post({#update}(this.val())?或类似的东西传递ID? – Lievcin 2011-05-23 08:45:35

+0

你可以通过GET请求来做到这一点,但有没有一个特定的原因,你为什么不想要在表单中包装选择列表?一个很好的约定是当你改变一个资源的时候总是做一个POST请求 – 2011-05-23 10:11:58

+0

另外,我忘了添加,在没有提交表单的情况下,你必须做一个jQuery .get() 类似这样 - $ .get(“/ some_URL”,{foo_active:$(this).val()},null,“script”); – 2011-05-23 10:14:53