2016-04-06 5 views
0

Ich habe (2) Modelle Item und Item_Type.Rails Routen basierend auf den zugehörigen Datensätzen einrichten

Artikel has_one: item_type

Das item_type Schema:

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

Ich möchte wie eine Route einzurichten, so /:item_type.title/ und präsentieren alle mit diesem item_type zugehörigen Elemente.

Antwort

0

Ich gehe davon aus, Artikel Titel sind einzigartig. Auch die Art und Weise, wie Ihr Schema eingerichtet ist, kann für jeden Elementtyp nur ein Element haben. Sie müssen das also umgestalten, wenn mehr als ein Element für einen bestimmten Elementtyp angezeigt werden soll.

So etwas wie dies funktionieren würde:

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

Dadurch wird zum Beispiel yourserver.com/foo Route zu der Aktion 'item_by_type_title' auf ItemsController. Dann in Ihrem Artikel Controller:

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

Vielen Dank für die Info! Wie würdest du den Verein umgestalten? Ich habe versucht zu vermeiden: item_type has_many: items – Dileet

+0

@Dileet, die einzige Möglichkeit für item_types mit vielen Elementen zugeordnet werden, ist, wenn die Elementtypen has_many Elemente (eine Eins-zu-viele-Datenbank-Zuordnung, in der jedes Element eine item_type_id hätte) oder eine Viele-zu-Viele-Beziehung. Es hängt wirklich von deinen Absichten ab. –

Verwandte Themen