Rails,请求另一个控制器

时间:2015-03-19 13:42:36

标签: ruby-on-rails ruby model-view-controller routing

我有三个模型ClientServiceFavouriteFavourite的结构是:

class Favourite
  include Mongoid::Document
  include Mongoid::Timestamps

  #Associations
  belongs_to :client
  belongs_to :service
end

这意味着ClientsServices有很多Favourites。我正在为我的模型创建仪表板。鉴于展示了单个Clients信息,我希望显示其Favourites,同样会显示单个Services

我想添加表单来创建Favourites,但此模型不会有自己的视图。它将通过ClientsServices显示。

我的第一个想法是为ClientsServices的控制器创建两种不同的方法。

我的第二个想法是为Favourites创建单独的控制器,该控制器将创建此模型,然后重定向到客户端和服务。

是否可以调用未与视图连接的控制器?

2 个答案:

答案 0 :(得分:1)

是的,您可以拥有一个没有视图的控制器。

存在多种选择:

  • 使用nested formscocoon在父表单中生成相关数据。收藏夹不需要控制器。

  • 在父视图中使用发送到收藏夹控制器的表单,该表单重定向回父视图。它只是用redirect_to

    重定向到其他地方
    • 使用相同的控制器方法但重定向到不同的父页面,包含一个隐藏的表单元素return_to,可用于确定重定向的位置。虽然过滤了值,但确保它是允许的网址,否则您可能会遇到安全漏洞。
  • 与上一个选项类似,但使用javascript / ajax发送和接收数据。控制器可能没有视图,但发送JSON或XML或其他任何内容。

答案 1 :(得分:0)

我认为你应该使用多态关联。在Favourite中,您应该存储favouritable_idfavouritable_type{ favouritable_id: "a", favouritable_type: "Client" }表示Favourite与客户端ID“a”相关联。要FavouriteController#create,您需要传递客户端/服务id渲染集合的type. In view段:client.favourites or渲染集合:service.favourites {{ 1}} Mongoid . I am not sure if to_partial_path`方法,你可以自己做,这很容易。