我是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.jbuilder
从def 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,我认为你最好继续这样做。