2016-04-06 4 views
0

У меня есть (2) модели Item и Item_Type.Настройка маршрутов рельсов на основе связанных записей

Item has_one: item_type

item_type схема:

create_table "item_types", force: true do |t| 
    t.string "title" 
    t.integer "item_id" <--- 
    t.datetime "created_at" 
    t.datetime "updated_at" 
    end 

Я хочу, чтобы настроить маршрут как так /:item_type.title/ и продемонстрировать все элементы, связанные с этим ITEM_TYPE.

ответ

0

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

Что-то, как это будет работать:

# routes.rb 
get '/:title' => 'items#item_by_type_title 

Это позволит, например, yourserver.com/foo к действию 'item_by_type_title' на ItemsController. Затем в вашем контроллере товаров:

def item_by_type_title 
    @item_type = ItemType.find_by_title(params[:title]) 
    @item = @item_type.item 
end 
+0

Спасибо за информацию! Как бы вы реорганизовали ассоциацию? Я пытался избежать: item_type has_many: items – Dileet

+0

@Dileet, единственный способ для item_types быть связан со многими элементами - это если элементы item has_many items (ассоциация базы данных «один ко многим», в которой каждый элемент будет иметь item_type_id) или отношения «многие ко многим». Это зависит от ваших намерений. –

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