我在这里面临着一个棘手的挑战,也许你们中的一个可以帮助我。没什么太难的,我只是不知道要走的好方法。来了:
我有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 => like; destroy =>不同)。
唯一的问题是我不知道如何用良好的路径创建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
旁边每个物品的控制器内都有重复的方法来处理“喜欢”和“ unlikes”。也许我错了?
谢谢。
答案 0 :(得分:2)
我会在这里找一个助手。
def likehelper(likable)
if likable.is_a? Activity
# return activitycommentpath..
...
end
然后在您的视图中link_to 'Like', likehelper(item)
,同样适用于Unlike
。如果其他对象变得“可爱”,那么您只需向助手添加新的“规则”。