В настоящее время я использую следующие драгоценные камни в своем приложении для обеспечения нумерации страниц, поиска, связываемых тегов и облака тегов.
gem 'will_paginate', '~> 3.0.2'
gem 'actions-as-taggable-on', '~> 2.1.0'
У меня все реализовано до сих пор в Rails 3.1, кроме ссылок тегов. Они отображаются ниже каждого поста и в облаке тегов, и оба они ссылаются на разные виды, и ни один из них не работает.
Ссылка в облаке тегов (Test1) связывает меня с: / posts / tag? Id = Test1, что выдает ошибку «Не удалось найти сообщение с id = тегом»
А ссылка в посте перенаправляет меня на / posts? Tag = Test2 & view = tag, которая ничего не меняет. Все мои сообщения все еще отображаются.
Вот что я изменил до сих пор, чтобы попытаться реализовать это:
Отредактированная часть моих маршрутов. Rb:
resources :posts do
collection do
get :tag
end
конец
Мой пост.рб:
acts_as_taggable_on :tags
def self.tag_post_list(page, tag)
Post.tagged_with(tag).by_date.paginate(:page => params[page], :per_page => 20)
end
Post_Controller.rb:
def index
@posts = Post.search(params[:search], params[:page])
@tags = Post.tag_counts_on(:tags)
if request.xhr?
render :partial => @posts
end
end
def tag
@posts = Post.tagged_with(params[:id])
@tags = Post.tag_counts_on(:tags)
render :action => 'index'
end
def show
@post = Post.find(params[:id])
@tags = Post.tag_counts_on(:tags)
respond_to do |format|
format.html # show.html.erb
format.json { render json: @post }
end
end
Posts_helper.rb:
include ActsAsTaggableOn::TagsHelper
Облако тегов в application.html.erb
<% tag_cloud(@tags, %w(css1 css2 css3 css4)) do |tag, css_class| %>
<%= link_to tag.name, { :action => :tag, :id => tag.name }, :class => css_class %>
<% end %>
Определение облака тегов в application_controller.rb
def tag_cloud
@tags = Post.tag_counts_on(:tags)
end
Ссылки в моих постах:
<% for tag in post.tags %>
<%= link_to tag.name, posts_path(:view =>'tag', :tag => tag.name) %>
<% end %>
Ошибка в моей консоли:
Started GET "/posts/tag?id=Test1" for 127.0.0.1 at 2011-11-05 00:35:00 -0700
Processing by PostsController#show as HTML
Parameters: {"id"=>"tag"}
Post Load (0.0ms) SELECT "posts".* FROM "posts" WHERE "posts"."id" = $1 LIMIT 1 [["id", "tag"]]
Completed 404 Not Found in 3ms
ActiveRecord::RecordNotFound (Couldn't find Post with id=tag): app/controllers/posts_controller.rb:33:in `show'
Последние 5 часов я искал в интернете, пытаясь выяснить это, но ничего не актуально или совершенно не актуально.
Я понял, что он передает "тег" в действие show, но как мне заставить его передать соответствующий идентификатор и все, что мне нужно, чтобы показать правильные сообщения с этим тегом?