2015-09-10 2 views
0

Привет, я новичок в Rails, и я изо всех сил пытаюсь создать фильтр, я сделал некоторые поисковые запросы, но я чувствую, что сейчас я в узком месте, действительно нужна какая-то помощь.Динамический выбор и фильтр в Rails 4


макете:

enter image description here

enter image description here

У меня есть модель событий, с заголовком, описанием и т.д., и теперь я хочу, чтобы добавить суд, Дом и тип события в модель. Когда пользователь создает событие, он должен выбрать суд, дом и какой тип события.

  • Пользователь должен выбрать суд, а затем выбрать дом, поскольку каждое имя дома отличается в каждом дворе.

  • Предпочтительно выпадающий дом должен появиться только после того, как выбрано значение для суда.

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

/events?court=foo&house=bar&event_type=fun 

И это нормально, если пользователь выбрать только один выбор и щелкнул Найти!

/events?court=foo  # show all foo court events 
/events?court=foo&event_type=fun  # show all fun type events at foo court 

Мои вопросы

Из некоторых ответов, которые я видел, что некоторые люди создали отдельные модели для суда, дома и т. д. Нужно ли в этом случае? Я хотел бы, чтобы держать все это в Event.rb, так что я могу сделать

validates :court, :house, :event_type, presence: true 

Для View, мы должны были бы JavaScript правильно? Используем ли мы его вместе с методом Event, подобным этому?

def return_house(selected_court) 
    if selected_court == 'foo' 
     ['bar1', 'bar2', 'bar3'] 
    elsif selected_court == 'baz' 
     ['qux1', 'qux2', 'qux3'] 
    end 
end 

Я использую f.input для раскрывающегося выбора, но я видел, что люди используют f.collection_select?

ответ

0

Поскольку суд может быть связан с несколькими событиями, вам необходимо создать отдельные модели и использовать отношения one_to_many.

class Event < ActiveRecord::Base 
    has_one :court, through: :event_court 
end 

class EventCourt < ActiveRecord::Base 
    belongs_to :event 
    belongs_to :court 
end 

class Court < ActiveRecord::Base 
    has_many :event_courts 
    has_many :events, through: :event_court 
end 

Вы также захотите сделать подобную вещь для event_type.

Этот тип настройки - это то, почему вы видите других людей, использующих collection_select.

Я предполагаю, что суд также может иметь несколько домов, так что вы хотите, чтобы создать отношения has_many между судами и дома

class Court < ActiveRecord::Base 
    has_many :houses 
end 

class House < ActiveRecord::Base 
    belongs_to :court 
end 

Примечание: Это не работает. Не просто скопируйте его.Вместо этого прочтите следующее: http://guides.rubyonrails.org/association_basics.html

Я предполагаю, что вы не просто знакомы с Rails, но и с веб-дизайнером. Если это так, вы можете быть в вашей голове. Вы делаете довольно продвинутый материал Rails.

+0

Спасибо за помощь, я подумал, используя несколько моделей, но тогда как я могу их фильтровать/искать? Я нашел этот камень https://github.com/plataformatec/has_scope, но кажется, что используют только контроллеры, а не модели. – tmvnty

+0

Этот камень использует модели. Первый пример кода, который они приводят, - это модель. Этот драгоценный камень помогает вашему контроллеру и вашей модели говорить. Я думаю, вам, вероятно, следует попробовать сначала создать более простое приложение, например, блог. – trosborn

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