【问题标题】:Rails: call model-methods (with ajax)Rails:调用模型方法(使用 ajax)
【发布时间】:2015-02-12 19:59:29
【问题描述】:

我的问题是,通过 ajax 调用方法的 Rails 方式是什么。让我们从报价开始

REST 是关于路径和动词的 (github.com/JumpstartLab/curriculum/)

我有一个对我的嵌套列表执行操作的方法。问题:当用户点击一个链接时,如何通过ajax调用它?或者根本没有。在 Rails 中。

class NestedList < ActiveRecord::Base

 def someListOperation # should be called when user clicks something
   ...
 end

end

你有吗

  1. 在#update 操作中放置一个开关块来决定是否调用以及调用什么方法?然后将方法名称与所需参数一起传递?
  2. 只为方法制定路线?
  3. 一些特殊的第三个选项只能通过 ajax-magic 获得

在 中,例如 link_to (或其他 ActionView::Helpers::FormTagHelper )带有method: :patchupdate-url,而在 中你会指出它到一些自定义网址,如/nested-list/move-up/:id

您通常将不只是更新数据字段的逻辑放在哪里。这是关于做某事用户操作($('a').bind('click', function() {...})。调用这些模型方法的正确方法是什么。遵循 MVC 这样的逻辑应该转到 model,对吗?因为大多数示例(使用或不使用 ajax)仅处理一对一更新数据字段,因为数据来自表单。

谢谢你,斯波茨。

【问题讨论】:

    标签: ruby-on-rails ajax methods model call


    【解决方案1】:

    要实现这一点,您必须添加一个带有相应路由的控制器操作。一个简单的例子是:

    config/routes.rb:

    patch "/nested-list/move_up/:id" => "nested_lists#move_up", as: :move_up_nested_list
    

    然后在您的嵌套列表控制器上:

    app/controllers/nested_lists_controller.rb:

    def move_up
     @nested_list = NestedList.find(params[:id])
     @nested_list.someListOperation
    
     respond_to do |format|
      format.html { redirect_to some_path_you_want_to_redirect }
      format.js
     end
    end
    

    现在您的控制器操作可以同时响应 html(默认)和 javascript,在您的视图中您可以像这样添加 link_to

    一些/view.html.erb:

    link_to "Move up", move_up_nested_list_path(nested_list), method: :patch, remote: true
    

    唯一缺少的是您必须添加一个 js 响应视图,以防您想要更新 DOM,例如:

    app/views/nested_lists/move_up.js.erb

    //Your javascript code
    

    【讨论】:

    • 谢谢我创建了一个路线/动作来移动节点 1)“水平”和 2)“垂直”上/下,另外传递一个由案例语句处理的 :direction 的值.
    【解决方案2】:

    最有意义的方法是为该操作创建一个路由和控制器方法。那么你是否会有一个路由和控制器方法,其动词对应于用户所做的事情,然后该控制器方法将与模型进行交互。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-18
      • 1970-01-01
      • 2016-09-27
      相关资源
      最近更新 更多