Здесь я сталкиваюсь с довольно сложной задачей, может быть, кто-то из вас может помочь мне в этом.Ничего особенного, я просто не знаю, как идти.Вот:
У меня есть 2 модели:
Activity
и Comment
Я использую MongoID здесь со знаменитым камнем для обработки голосов (лайков).Это только заботится о встраивании модели голосования в Activity
или Comment
.
Это означает, что у меня нет модели Like
.
Как бы я ни хотелхотел бы иметь возможность "любить" "активность" и / или "комментарий".Я предполагаю пойти с одним контроллером с именем LikesController
и двумя способами для того, чтобы понравиться или не понравиться элемент.
Я бы тогда имел такие маршруты:
resources :activities, :only => [] do
resources :comments, :only => [:create, :destroy]
resources :likes, :only => [:create, :destroy]
end
resources :comments, :only => [] do
resources :likes, :only => [:create, :destroy]
end
Вотуказанные маршруты от bundle exec rake routes
:
activity_comments POST /activities/:activity_id/comments(.:format) comments#create
activity_comment DELETE /activities/:activity_id/comments/:id(.:format) comments#destroy
activity_likes POST /activities/:activity_id/likes(.:format) likes#create
activity_like DELETE /activities/:activity_id/likes/:id(.:format) likes#destroy
comment_likes POST /comments/:comment_id/likes(.:format) likes#create
comment_like DELETE /comments/:comment_id/likes/:id(.:format) likes#destroy
Теперь я хотел бы иметь ссылку "Мне нравится" / "Не похоже" на странице просмотра, указывающей на LikesController
на соответствующих действиях (create =>как; уничтожить => в отличие от).
Единственное, что я не знаю, как создать link_to
с хорошим путем.Вот что у меня есть:
link_to 'Like', eval("#{item.class.name.downcase}_likes_path(item)"), :method => 'post'
link_to 'Unlike, eval("#{item.class.name.downcase}_likes_path(item)"), :method => 'destroy'
Может кто-нибудь дать мне совет, как сделать это более чистым способом?
Вот мои модели:
class Activity
include Mongoid::Document
include Mongoid::Timestamps
include Mongo::Voteable
has_many :comments, :as => :item
belongs_to :subject, :polymorphic => true
embeds_one :user
validates :user, :presence => true
voteable self, :up => +1, :down => -1
end
class Comment
include Mongoid::Document
include Mongoid::Timestamps
include Mongo::Voteable
belongs_to :item, :polymorphic => true
embeds_one :user
field :text, :type => String, :default => nil
validates :text, :presence => true
validates :user, :presence => true
attr_accessible :text, :user
voteable self, :up => +1, :down => -1
end
Вы должны иметь в виду, что многие объекты будущего также могут быть "симпатичными", поэтому я предпочитаю идти с LikesController
помимодубликат метода внутри контроллера каждого элемента для обработки «нравится» и «не нравится».Может я не прав?
Спасибо.