我在Ruby on Rails(Rails 3)中有一个具有“status”值的模型。状态可以打开或关闭。在此模型的索引视图中,我显示了每个项目的状态(只显示“on”或“off”的基本文本)。我希望用户能够为每个项目单击此状态字段,然后必须切换,而无需重新呈现页面。所以它基本上就像一种开/关开关。
当我切换特定对象的开/关开关时,我需要调用控制器动作来执行某些操作。然后我还需要更新视图,将“on”更改为“off”或“off”更改为“on”。
我认为JavaScript是可行的方法。我不确定我是否也需要ajax。我一直在寻找有关如何将JavaScript添加到Ruby on Rails应用程序的基本分步说明的教程。我是RoR中JavaScript的完全新手。我发现的大多数教程都假定了JQuery / Protocol / Ajax / Javascript的基本背景知识,或者它在切线上有用。
有人可能会推荐一个好的,基本的,整洁的教程来开始使用Ruby on Rails中的JavaScript和/或提供一个关于如何实现上述功能的基本大纲?
答案 0 :(得分:1)
两种方法。
Rails方式:视图助手form_for有一个选项:remote =>是的,将执行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"
这里的一切都是惯例,所以它会转到你的汽车#update action,你会返回Javascript来显示/隐藏你的表格。通过这种方式,您可以使用jQuery show()和hide()方法切换On / Off表单。 http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html#method-i-form_for
简单的jQuery方式:使用相同的表单,但没有:remote =>真正的选择。控制器也是一样的,你只需返回JSON(如果更新成功与否,则返回一个值)。在客户端添加您自己的javascript($ .ajax)以更新对象并切换html表单。
我倾向于使用第二个选项,因为我讨厌从控制器返回Javascript。我喜欢在同一个地方拥有与一个事件相关的所有Javascript。
答案 1 :(得分:0)
第一步。 在您的控制器操作中,让该操作能够响应像
这样的ajaxclass DocumentsController < ApplicationController
respond_to :html, :js, :json
def edit
@document = current_user.documents.find(params[:id])
respond_with @document, location: root_path
end
然后你将在你的appropiate views控制器中创建一个* .js.erb文件,在这种情况下在我的app / views / documents中,我称之为edit.js.erb 现在在你的js.erb文件中你将有一些查询将操纵你想要的dom eleemnt。 就像我在视图中调用编辑操作一样,无论是通过链接还是按钮或其他任何东西,都会触发js.erb文件。
这是一种方式。 另一种方法(rails方式)是在app / assets / javascript文件夹中添加一些jQuery动作观察器。这些是静态的,名为* .js.coffee 如果用户正在操作,这些jQuery操作可能就是您想要使用它的方式。只需为该dom元素添加jQuery,它就会被编译并加载到资产管道中。 有许多教程可以学习如何做到这一点,我建议您每隔6个月查找一次最新的东西作为轨道更改的方法。