Rails,向另一个控制器请求

Rails, request to another controller

我有三个型号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 创建单独的控制器,它将创建此模型,然后重定向到客户端和服务。

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

我认为你应该使用多态关联。在 Favourite 中,您应该存储 favouritable_idfavouritable_type{ favouritable_id: "a", favouritable_type: "Client" } 表示 Favourite 与客户端 ID "a" 连接。要 FavouriteController#create,您需要传递参数 idtype of client/service. In viewrender collection: client.favouritesorrender collection: service.favourites. I am not sure ifMongoidclasses implementto_partial_path`方法,自己做很简单

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

存在多个选项:

  • 使用nested forms and cocoon在parent表格中生成相关数据。收藏夹不需要控制器。

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

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