Mein Projekt hat drei Hauptteile dazu:Wie mache ich meine Objekte weniger unordentlich?
- Seiten (ähnlich Artikel)
- Kategorien (die Seiten haben eine Kategorie mit ihnen verbunden sind)
- Schlagworte (jede Seite kann mehrere verschiedene Tags haben)
ich habe eine Sidebar, die @categories zu ziehen durch eine Liste aller aktuellen Kategorien in meinem Projekt verwendet:
<div class="col-md-3">
<p class="lead">Categories</p>
<div class="list-group">
<%= link_to 'All articles', pages_path(@page), :class => 'list-group-item' %>
<% @categories.each do |category| %>
<%= link_to category.name, category_path(category), :class => 'list-group-item' %>
<% end %>
</div>
</div>
Aber momentan muss ich
@categories = Category.all
In meinem Index aufnehmen und zeigen Aktionen in meinem Controller für beide Seiten und Kategorien, so dass die Seitenleiste Lasten (ich nur die Seitenleiste in diesen beiden Teilen des Projekts verwendet werden).
Gibt es einen einfacheren Weg dies zu tun, als den obigen Code in jede Aktion in der Steuerung einzubeziehen?
Auch mit dem Tags-Controller nach dem Erstellen einer Seite und gehen Sie auf die Show-Seite des Tags, um alle mit diesen Tags verbundenen Seiten anzuzeigen, bekomme ich eine Fehlermeldung mit der ID '= 2 konnte nicht gefunden werden.
class TagsController < ApplicationController
def index
@tags = Tag.all
end
def show
@tag = Tag.find(params[:id])
@page = Page.find(params[:id])
@categories = Category.all
end
-
<% @tag.pages.each do |page| %>
<div class="thumbnail">
<div class="text">
<article class="clearfix">
<%= link_to page.title, url_for_page(page), class: "h1" %>
<p class="pull-right"><span class="glyphicon glyphicon-time"></span> Posted on <%= page.created_at.to_formatted_s :long %></p>
<hr />
<%= page.body.html_safe %>
<hr />
<div class="btn-group btn-group-xs" role="group" aria-label="...">
<% page.tags.each do |tag| %>
<%= link_to tag.name, tag_path(tag), class: "btn btn-info" %>
<% end %>
</div>
</article>
</div>
</div>
<% end %>
bekam Wer irgendwelche Ideen? Jede Hilfe würde sehr geschätzt werden :)
Vielen Dank!
Update:
Routen-Datei:
Rails.application.routes.draw do
resources :categories
resources :pages
resources :tags
Modelle:
Category.rb
class Category < ActiveRecord::Base
has_many :pages
Page.rb
class Page < ActiveRecord::Base
include Bootsy::Container
belongs_to :category
has_many :taggings
has_many :tags, through: :taggings
def tag_list
self.tags.collect do |tag|
tag.name
end.join(", ")
end
def tag_list=(tags_string)
tag_names = tags_string.split(", ").collect{ |s| s.strip.downcase }.uniq
new_or_found_tags = tag_names.collect { |name| Tag.find_or_create_by(name: name) }
self.tags = new_or_found_tags
end
end
Tag.rb
class Tag < ActiveRecord::Base
include Bootsy::Container
has_many :taggings
has_many :pages, through: :taggings
def to_s
name
end
end
Tagging.rb
class Tagging < ActiveRecord::Base
include Bootsy::Container
belongs_to :tag
belongs_to :page
end
Ist es ein Tippfehler oder haben Tag und Page wirklich die gleiche ID aus der Anfrage? – unused
Wohin suchen Sie? Es starrt mich wahrscheinlich direkt in die Augen, aber ich kann nicht sehen, wo ich falsch gelaufen bin: p – Rixcy
In den Tags # index verwenden Sie '@tag = Tag.find (params [: id])' und '@page = Page.find (params [: id]) ', also Seite und Tag mit denselben Bezeichnern? – unused