这是我相当简单的场景:我有一个基本的MVC设置,在我看来,我有一个下拉列表,它应该允许用户选择要连接的不同数据库。因此,默认情况下,页面加载并且我的控制器建立与默认数据库的连接,将其称为DB_Foo(实际上扩展了ActiveRecord :: Base),并且我的视图使用来自DB_Foo的数据呈现表。它看起来像这样:
class MyController < ApplicationController
def index
@db_to_use = params[:db].nil? ? DB_Foo : params[:db]
# imagine some code to establish_connection
@table_data = @db_to_use.all
end
end
然后,在我看来,我可以通过循环@table_data.to_a
来呈现数据。
现在,我选择一个不同的数据库,比如从下拉列表中选择DB_Bar,然后我将jQuery.get()调用(Ajax GET的简写)触发到同一个控制器,并将DB_Bar作为参数传入。我可以验证,当这个新请求被路由到我的控制器时,它会看到我传递的DB_Bar参数,并且能够建立与DB_Bar的连接。我已经验证@table_data现在包含来自DB_Bar的新数据,在index
方法的末尾。
我想要的基本上是Rails使用相同的控制器重新渲染相同的视图,但是使用来自DB_Bar而不是DB_Foo的不同数据集。但是,在我的浏览器中没有任何更新,对我而言,这意味着我的视图没有呈现(如果确实如此,它将使用@table_data中的新数据,我会看到它)。
这种设计是否非常偏离轨道?我必须在.get()上使用jQuery回调来手动修改HTML元素吗? Rails不应该只使用新数据再次渲染我的页面吗?