1

我在 Ruby on Rails (Rails 3) 中有一个具有“状态”值的模型。状态可以是开启或关闭。在这个模型的索引视图中,我显示了每个项目的状态(只是显示“开”或“关”的基本文本)。我希望用户能够单击每个项目的此状态字段,然后它必须切换,而不必重新呈现页面。所以它基本上就像一种开/关开关。

当我切换特定对象的开/关开关时,我需要调用控制器操作来执行一些操作。然后我还需要更新视图以将“on”更改为“off”或将“off”更改为“on”。

我想 JavaScript 将是要走的路。我不确定我是否也需要ajax。我一直在寻找有关如何将 JavaScript 添加到我的 Ruby on Rails 应用程序的非常基本的分步说明的教程。我是 RoR 中 JavaScript 的完全新手。我发现的大多数教程都假设有 JQuery/Protocol/Ajax/Javascript 的基本背景知识,否则就离题了。

有人可以推荐一个好的、基本的和整洁的教程来开始使用 Ruby on Rails 中的 JavaScript 和/或给出一个关于如何实现上述功能的基本大纲?

4

2 回答 2

1

两种方式去。

Rails 方式:视图助手 form_for 有一个选项 :remote => true 将执行 ajax 请求。假设您的模型称为Car,而 @car 是现有对象的实例,您可以这样做:

= form_for @car, :remote => true do |f|
  = f.hidden_field :status, true
  = f.submit_tag "On"

= form_for @car, :remote => true do |f|
  = f.hidden_field :status, false
  = f.submit_tag "Off"

这里的一切都是约定俗成的,所以它会转到您的 cars#update 操作,您将在其中返回 Javascript 以显示/隐藏您的表单。通过这种方式,您可以使用 jQuery show() 和 hide() 方法切换 On / Off 表单。 http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html#method-i-form_for

简单的 jQuery 方式:使用相同的表单但没有 :remote => true 选项。控制器也是相同的,您将只返回 JSON(带有一个值说明更新是否成功)。在客户端上添加您自己的 javascript ($.ajax) 以更新对象并切换 html 表单。

我倾向于使用第二个选项,因为我讨厌从控制器返回 Javascript。我喜欢将所有与一个事件相关的 Javascript 放在同一个地方。

于 2012-06-08T13:05:31.817 回答
0

第一步。在您的控制器操作中,让该操作能够响应 ajax 之类的

class DocumentsController < ApplicationController
    respond_to :html, :js, :json
    def edit
        @document = current_user.documents.find(params[:id])
        respond_with @document, location: root_path
    end

然后您将在您的适当视图控制器中创建一个 *.js.erb 文件,在这种情况下,在我的 app/views/documents 中,我称之为 edit.js.erb 现在在您的 js.erb 文件中,您将有一些查询这将操纵你想要的 dom 元素。就像我在视图中调用编辑操作时一样,无论是通过链接还是按钮或其他方式,它都会触发 js.erb 文件。

这是一种方式。另一种方法(rails 方式)是在你的 app/assets/javascript 文件夹中添加一些 jQuery 动作观察者。这些是静态的,被命名为 *.js.coffee 如果用户正在操作,这些 jQuery 操作可能是您想要使用的方式。只需为该 dom 元素添加 jQuery,它将被编译并加载到资产管道中。并且有很多教程可以学习如何做到这一点,我建议寻找最新的东西作为每 6 个月在 Rails 中进行所有这些更改的方法。

于 2012-06-08T12:41:06.520 回答