ruby on rails,搜索结果到 json 数组 (jbuilder)

ruby on rails, search results to json array (jbuilder)

我是 rails 的新手,我有一个简单的问题...

我有一个日历 gem 当前从 json 中提取事件数据 (viewings/index.json.jbuilder)

json.array!(@viewings) do |viewing|
  json.extract! viewing, :id, :room_id, :user_id, :start_time, :end_time, :notes
  json.title viewing.user.name
  json.start viewing.start_time
  json.end viewing.end_time
  json.url viewing_url(viewing, format: :html)
end

无论如何,我在我的 "viewings" 索引页面上创建了一个搜索功能,用户可以从下拉列表中选择房间并显示相应的观看次数。

但是,我需要根据搜索结果创建一个 JSON 数组,以便可以将其提供给日历。

我知道我可以通过做类似的事情来实现这一点,这确实有效:

@viewings = Viewing.where(room_id: 1 )

但显然我想将一个变量传递给那行代码,比如

@viewings = Viewing.where(room_id: params[:search_string] )

搜索字符串始终是房间 ID,但上面的代码(以及我能想到的任何变体)似乎不起作用。

或者我可以从我的搜索输出中创建一个 JSON 数组吗?我的搜索也是这样...

  def search
    @rooms = Room.all
        @viewings = Viewing.simple_search(params[:search_string])
        render :action => "index"
  end

有人能帮忙吗?!

编辑:

我仍然在为这个问题苦苦挣扎。我查看了下面的 jquery 页面,但它仍然没有达到我的预期。

我已经简化了我的观看控制器中的功能:

  def rmselect
    @query1 = params[:rmno]
    @rooms = Room.all
        @viewings=Room.find(params[:rmno]).viewings
    render :action => "index"
  end

并且我创建了一个 _rmselect。json.jbuilder 是这样的:

@viewings = Viewing.where(room_id: @query1 )
json.array!(@viewings) do |viewing|

  json.title viewing.user.name
  json.start viewing.start_time
  json.end viewing.end_time

end

我希望 @query1 变量会被传递到 jbuilder 页面,这将导致它只显示所选房间的观看次数。但是,jbuilder 似乎看不到任何变量,除非它们在 def index(那里不好)。

我也不明白为什么 _rmselect.json.jbuilderdef index 中获取 @viewings.all,而不是从 def rmselect 中获取 @viewings=Room.find(params[:rmno]).viewings

好的,我想情况是这样的:

查看模型:

class Viewing < ActiveRecord::Base
   ...
   belongs_to :room
   ...
end

房间模型:

class Room < ActiveRecord::Base
   ...
   has_many :viewings
   ...
end

通过房间id检索观看次数,您可以这样做:

@viewings=Room.find(params[:search_string]).viewings

为了创建 JSON 结果数组,呈现包含类似内容的 jbuilder 视图:

# @people = People.all

json.array! @people, :id, :name

  # => [ { "id": 1, "name": "David" },      { "id": 2, "name": "Jamie" } ]

我报告了一个官方 jbuilder 的例子docs我认为你可以使用 json.array 观看:

json.array! @viewings, field1, field2, ...

否则你可以在你的控制器中使用这个:

render json: @viewings

但如果您使用过 jbuilder,我认为您最好继续使用。