Ich habe eine RoR-App. Und in der App können Benutzer Beiträge erstellen. Ich habe Post-Tabelle in meinem routes.rb
über resources :posts
verbunden. Und jetzt - Link zum erstellten Beitrag sehen aus wie: http://mysitename.com/posts/1
(wo 1 ist Post-Nummer).Schienen, wie automatisch generierten Link zu ändern
Was ich tun möchte, ist, um Schienen Link zu Post zu erzeugen. Die Benutzer haben also nicht gesehen, wie viele Beiträge ich in meiner Datenbank habe. Und als Ergebnis muss es wie http://mysitename.com/post/generatedlink
aussehen. Es muss beispielsweise Post-Theme generieren.
Für den Anfang müssen wir link
Spalte in Posts Tabelle erstellen. Und machen Sie es so etwas zu erzeugen:
@post.link = @post.theme.parameterize.underscore
Aber ich verstehe nicht, wo diesen Code zu setzen.
Und das nächste Problem ist: "Wie post/1
für @post.link
ersetzen?"
Hoffe, ich mache mir selbst klar. Wenn Sie sagen, dass ich Informationen bereitstellen kann, was ist erforderlich, um meine Frage zu lösen.
UPDATE
Was ich nach @SteveTurczyn beraten hat.
Ich habe eine neue Spalte namens random_link
als string
erstellt.
Ich hatte keinen Kontakt mit meiner routes.rb
:
resources :posts
Mein post.rb
(post-Modell) wie folgt aussehen:
after_validation :add_link
def add_link
self.random_link = self.theme.to_slug_param
# to_slug_param it's a gem for translating from other language into english
end
def to_param
random_link
end
ich nicht find-Methode haben. Mein posts_controller.rb
sieht wie folgt aus:
def show
@post = Post.find_by_random_link(params[:id])
right_menu_posts
random_link_to_other_post(@post)
end
private
def random_link_to_other_post(post)
random_post = Post.where.not(id: post.id)
@random_post = random_post.sort_by {rand}.first
end
def right_menu_posts
@posts_for_video_in_right_menu = Post.where(video: true)
end
Und html.erb:
<%= @post.theme %>
<%= @post.content %>
<% for post in @random_post %>
<%= link_to post %>
<% end %>
<% for post in @posts_for_video_in_right_menu %>
<%= link_to post %>
<% end %>
Und auf einer Hauptseite (wo ich habe eine Liste der Veröffentlichungen) einen keep einen Fehler bekommen: NoMethodError in Home#index private method 'to_param' called for #<Post:0x007fae3096bf78>
.
vielleicht betrachten Sie dieses Juwel: https://github.com/norman/friendly_id Allerdings ist es zu lernen, wie es ohne ein Juwel zu tun, es wert, zu lernen, da es nicht so schwierig zu implementieren ist. –
Sie sollten 'to_param' nicht im privaten Teil Ihrer Modelldefinition haben. Ich habe meine Antwort geändert, um das zu verdeutlichen. – SteveTurczyn