2012-05-20 80 views
0

我有一个Rails 3.2中的数据表的脚手架。当我查看表单时,我有一个用户可以更改的组合框,并且该值将立即存储在数据库中,而不必进入编辑模式并在此处进行更改并按下保存。Rails,当用户选择组合框值时更改db值

我已经捕获使用CoffeeScript的改变的值:

$(document).ready -> 
    $("#change_department").change -> 
    $ajax 
     url: "/Locations/" + # need to set id and new value here 
     success: (data) -> 
     alert data # will need to write a confirmation below the combobox 

什么我scrathing我的头的是什么控制器动作,我应该打电话,我应该如何准备数据。我在想创建一个新的控制器动作,我将传入模型的id和组合框中的新值,并在控制器中找到模型并传入更改后的值。这应该可能是一个在URL中有两个参数的get方法(我不知道如何使用post)。这是一个很好的方法,还是有人会建议替代方法?

我将如何获得id和上述coffeescript代码中的更改值?

谢谢

回答

2

1)更新数据时,请使用PUT请求。这是Rails的基本REST风格(GETshow,POSTcreatePUTupdate,DELETE→销毁)。所以基本上,要调用的动作是LocationsController#update(根据您发布的代码判断)。不需要新的动作

2)将整个更新路径置于元素的data-属性中。我假设你的意思是“下拉菜单”当你说“组合框”,在这种情况下,它会是这样的<select id="change_department" name="location[department]" data-uri="/Locations/23"> ...

$("#change_department").change -> 
    url = $(this).data("uri") 
    data = {} 
    data[@name] = @value 
    $.ajax 
    method: "put" 
    url: url 
    data: data 
    success: ... 

在控制器端的更新动作可以保持不变。

+0

谢谢 - 我现在在正确的轨道上。 – gugguson

+0

@gugguson乐于助人。主要的一点是,尽可能在HTML中放置尽可能多的信息,并尽可能不显眼地进行操作。非常有用的'data- *'属性基本上就是在保持HTML有效的同时做到的 – Flambino

相关问题