Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 链接到的多态行为_Ruby On Rails_Ruby On Rails 3_Polymorphism - Fatal编程技术网

Ruby on rails 链接到的多态行为

Ruby on rails 链接到的多态行为,ruby-on-rails,ruby-on-rails-3,polymorphism,Ruby On Rails,Ruby On Rails 3,Polymorphism,我在这里面临着一个棘手的挑战,也许你们中的一个可以在这方面帮助我。没什么太难的,我只是不知道该怎么走。下面是: 我有两种型号: 活动和评论 我在这里使用MongoID和一个著名的gem来处理投票(喜欢)。它只负责在活动或评论中嵌入投票模型 这意味着我没有像那样的模型 我多么希望能够“喜欢”一项“活动”和/或“评论”。我的猜测是使用一个名为LikesController的控制器,使用两种方法来喜欢或不喜欢某个项目 我会有这样的路线: resources :activities, :only =&

我在这里面临着一个棘手的挑战,也许你们中的一个可以在这方面帮助我。没什么太难的,我只是不知道该怎么走。下面是:

我有两种型号:

活动
评论

我在这里使用MongoID和一个著名的gem来处理投票(喜欢)。它只负责在
活动
评论
中嵌入投票模型

这意味着我没有像那样的
模型

我多么希望能够“喜欢”一项“活动”和/或“评论”。我的猜测是使用一个名为
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
现在我希望在一些视图页面中有一个“like”/“inspect”链接,指向相应操作(create=>like;destroy=>inspect)上的
likescoller

唯一的问题是,我不知道如何使用好的路径创建指向
链接。
以下是我到目前为止的情况:

link_到'Like',eval(“#{item.class.name.downcase}_likes_path(item)”,:method=>'post'

link_to'inference,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
您必须记住,很多futur对象也可能“可爱”,这就是为什么我选择使用
LikesController
,除了在每个项目的控制器中使用复制方法来处理“喜欢”和“不喜欢”之外。也许我错了


谢谢。

我想在这里找一个视图助手

def likehelper(likable)
  if likable.is_a? Activity
    # return activitycommentpath..
  ...
end

然后在您的视图中
链接到'Like',likehelper(item)
,而
不同之处也一样。如果其他对象变得“讨人喜欢”,您所要做的就是为您的助手添加一个新的“规则”。

是的,我也有这个想法,我只是不喜欢嵌套的If-ELSE条件^^^^但我想可能您没有选择权>