rails 4在控制器之间传递对象

时间:2014-07-13 01:14:41

标签: ruby-on-rails

我有一个Queries Controller处理API请求的结果,我试图将该api对象传递给另一个控制器,而不必将信息保存到数据库(应用程序的关键点是返回某个邮政编码中可用的电影列表,然后允许用户查看这些结果并与该电影周围的朋友一起创建活动,因此当api调用时,无需将电影信息保存在我的数据库中制作,因为它返回了很多电影)

以下是create中的Queries Controller方法:

def create
    @query = Query.new
    @query.zip = query_params['zip']
    @query.date = query_params['date']
    @results = data(@query.zip, @query.date)
    redirect_to results_path, :results => @results
  end

以及传递给

results方法
def results
end

然后是我正在尝试显示结果对象的相应Results view

<h3>Index</h3>

<%= results %>

2 个答案:

答案 0 :(得分:0)

尝试将params散列中的结果传递给results方法

def create
  @query = Query.new
  @query.zip = query_params['zip']
  @query.date = query_params['date']
  @results = data(@query.zip, @query.date)
  redirect_to results_path(:results => @results)
end

然后:

def results
  @results = params[:results]
end

在视图中:

<h3>Index</h3>

<%= @results %>

答案 1 :(得分:0)

<强> MVC

我的想法是你的想法是针对MVC programming pattern(Rails所基于的):

enter image description here

控制器意味着从HTTP获取request,并使用它来操作屏幕上的数据通过模型。然后,该模型可以提供您需要的data,可以将其传递给视图。

发送请求跨控制器是违反此模式的IMO - 您可以更好地在单个controller action中处理数据,然后从模型中提取数据。

话虽如此,我认为你做得比较好,尽管你可能希望考虑在系统层面进行重构。

-

<强>修正

p>
instance variable

您应该可以使用它来传递您需要的数据。

另一种方法是直接在results mjhlobdell方法中操纵/呈现响应,如下所示:

#app/controllers/queries_controller.rb
Class QueriesController < ApplicationController
   def query
       ...
       redirect_to results_path(results: @results)
   end
end

#app/controllers/results_controller.rb
Class ResultsController < ApplicationController
    def results
       @results = params[:results]
    end 
end