【问题标题】:ruby on rails, search results to json array (jbuilder)ruby on rails,搜索结果到 json 数组(jbuilder)
【发布时间】:2015-04-20 04:09:02
【问题描述】:

我是 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

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

但是,我需要从搜索结果中创建一个 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.jbuilder 会从 def index 获取 @viewings.all,而不是从 def rmselect 获取 @viewings=Room.find(params[:rmno]).viewings

【问题讨论】:

    标签: ruby json ruby-on-rails-4 jbuilder


    【解决方案1】:

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

    查看模型:

    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,我认为您最好继续这样做。

    【讨论】:

    • 您好,感谢您抽出宝贵时间回复。不幸的是,您的链接似乎已失效,我不确定如何查找。
    • 我想谁 params[:search_string] 是一个 ID 数组,看起来像:[1,2,3]。如果我认为正确的 find 方法返回一个对象数组。
    • 如果 search_string 是 Json 数组字符串,您可以使用 library 解析字符串,然后使用 find。
    • 抱歉,我解释得不好可能是我的错,但 search_string 不是 json 数组,这是来自选择字段的输入。我需要提取的是这里搜索后的结果code@viewings = Viewing.simple_search(params[:search_string])"code
    • 好的,如果你有 room_id 你可以搜索这个房间并检索查看:@viewings=Room.find(params[:search_string]).viewings
    猜你喜欢
    • 1970-01-01
    • 2013-12-23
    • 2012-09-30
    • 1970-01-01
    • 2016-04-07
    • 2015-07-19
    • 2014-06-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多