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



我是rails的新手,我只是有一个快速的问题。。。

我有一个日历宝石,它目前从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

无论如何,我已经在我的"视图"索引页面上创建了一个搜索功能,用户从下拉列表中选择房间,它会显示相应的视图。

但是,我需要根据搜索结果生成一个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文档的例子,我认为您可以将json.array与视图一起使用:

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

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

render json: @viewings

但如果你已经使用过jbuilder,我认为你最好继续这样做。

最新更新