2015-02-18 2 views
1

Я новичок в рельсах, и я просто быстрый вопрос ...рубин на рельсах, результаты поиска в массиве JSon (JBuilder)

У меня есть календарь драгоценный камень, который в настоящее время извлекает данные о событиях из JSON в качестве такового (просмотры/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]) 

Строка поиска всегда будет идентификатором комнаты, но приведенный выше код (и любые варианты, о которых я могу думать), похоже, не работает.

ИЛИ могу я сделать массив JSON из моего вывода поиска. мой поиск - это так ...

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

Может кто-нибудь помочь ?!

EDIT:

Я все еще борется с этим много. Я посмотрел на страницу 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 принимает @viewings.all от def index, а затем @viewings=Room.find(params[:rmno]).viewings от def rmselect.

ответ

0

Хорошо, я полагаю, ситуация такова:

Просмотр модели:

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

модель номер:

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

Retrive просмотров из номера идентификатора, вы можете сделать что-то вроде:

@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, я думаю, что лучше вы будете продолжать этот путь.

+0

Привет, спасибо, что нашли время ответить. К сожалению, ваша ссылка, кажется, мертва, и я не знаю, как это сделать. – Mitch

+0

Я полагаю, кто params [: search_string] является массивом идентификаторов и выглядит так: [1,2,3]. Если я предполагаю, что метод find вернет массив объектов. – GeekRiky

+0

Если search_string - строка массива Json, вы можете использовать эту [библиотеку] (http://flori.github.io/json/) для строки синтаксического анализа, а затем использовать find. – GeekRiky

Смежные вопросы