【问题标题】:Rails, change db value when user selects combobox valueRails,当用户选择组合框值时更改数据库值
【发布时间】:2012-05-27 12:01:01
【问题描述】:

我在 Rails 3.2 中有一个数据表的脚手架。当我查看表单时,我有一个用户可以更改的组合框,该值将立即存储在数据库中,而无需进入编辑模式并在那里更改并按保存。

我已经使用 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

我头疼的是我应该调用什么控制器操作以及我应该如何准备数据。我正在考虑创建一个新的控制器操作,我将在其中传递模型的 id 和组合框中的新值,在控制器中我会找到模型并传递更改的值。这可能应该是一个在 url 中有两个参数的 get 方法(我不知道如何使用 post 来做到这一点)。这是一个好方法还是有人会建议替代方法?

如何在上面的咖啡脚本代码中获取 id 和更改后的值?

谢谢

【问题讨论】:

    标签: jquery ruby-on-rails-3 coffeescript


    【解决方案1】:

    1) 更新数据时,使用 PUT 请求。这就是 Rails 的基本 RESTful 风格(GETshowPOSTcreatePUTupdateDELETE → 销毁)。所以基本上,要调用的操作是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 很高兴为您提供帮助。要点实际上是在 HTML 中放置尽可能多的信息,并且尽可能不显眼。非常有用的data-* 属性基本上就是为了做到这一点,同时保持 HTML 有效
    猜你喜欢
    • 2021-08-17
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    • 2013-02-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-18
    • 1970-01-01
    相关资源
    最近更新 更多