Rails,当用户选择组合框值时更改db值
问题描述:
我有一个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代码中的更改值?
谢谢
答
1)更新数据时,请使用PUT请求。这是Rails的基本REST风格(GET
→show
,POST
→create
,PUT
→update
,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: ...
在控制器端的更新动作可以保持不变。
谢谢 - 我现在在正确的轨道上。 – gugguson
@gugguson乐于助人。主要的一点是,尽可能在HTML中放置尽可能多的信息,并尽可能不显眼地进行操作。非常有用的'data- *'属性基本上就是在保持HTML有效的同时做到的 – Flambino