私はRoRアプリケーションを持っています。そして、アプリのユーザーは投稿を作成することができます。 resources :posts
でroutes.rb
に投稿テーブルを接続しました。そして、今すぐ - 作成された投稿へのリンクはhttp://mysitename.com/posts/1
のようになります(1は投稿番号です)。Rails、自動生成リンクの変更方法
私がしたいことは、レールが投稿するリンクを生成することです。だから、ユーザーは自分のDBにどれくらいの投稿があるのか分からなかった。結果としてhttp://mysitename.com/post/generatedlink
のように見える必要があります。それは、たとえば投稿テーマを生成する必要があります。
開始するには、投稿テーブルにlink
の列を作成する必要があります。
@post.link = @post.theme.parameterize.underscore
しかし、私はこのコードをどこに置くべきか分かりません。
さらに、「post/1
を@post.link
に置き換える方法は?」という問題があります。
希望、私は自分自身を明確にします。私が情報を提供できると言うなら、私の質問を解決するために何が必要です。私は@SteveTurczynのアドバイスの後にやった
UPDATE
。
としてrandom_link
という新しい列が作成されました。このようになり
resources :posts
マイpost.rb
(ポストモデル)::
私は私のroutes.rb
には触れませんでした
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
私はfindメソッドを持っていません。このような私のposts_controller.rb
外観:
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
そしてhtml.erb:NoMethodError in Home#index private method 'to_param' called for #<Post:0x007fae3096bf78>
:
<%= @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 %>
とエラーになってキープ(私は記事のリストを持っている)メインページ
。
おそらくこの宝石を見てください:https://github.com/norman/friendly_idしかし、それは実装するのが難しくないので、勉強のために宝石なしでこれを行う方法を理解する価値があります。 –
モデル定義のプライベート部分に 'to_param'を置くべきではありません。私はそれを明確にするために私の答えを修正しました。 – SteveTurczyn