我现在已经学习Rails大约6周了,所以还是一个菜鸟!
我正在跟踪Ryan Bates关于多态关联的截屏视频,但在导航到/ model / xx / comments时我遇到了“No Route Matches”错误。
经过两天的圈子,我完全被难倒了 - 一切似乎已经到位。
评论模型:
create_table "comments", :force => true do |t|
t.text "content"
t.integer "user_id"
t.integer "commentable_id"
t.string "commentable_type"
t.datetime "created_at"
t.datetime "updated_at"
end
评论类:
class Comment < ActiveRecord::Base
belongs_to :commentable, :polymorphic => true
end
其他型号类:
class ModelName < ActiveRecord::Base
has_many :comments, :as => :commentable
end
的routes.rb
resources :modelname, :has_many => :comments
comments_controller.rb
def index
@commentable = find_commentable
@comments = @commentable.comments
end
private
def find_commentable
params.each do |name, value|
if name =~ /(.+)_id$/
return $1.classify.constantize.find(value)
end
end
nil
end
这一切都根据教程,但仍然返回“没有路线匹配”。
我已尝试将路由的替代格式设置为嵌套资源。
resources :modelname do |modelname|
modelname.resources :comments
end
在routes.rb
中明确定义注释resources :comments
routes.rb中的各种术语组合
resources :modelname, :has_many => :commentables
或
resources :modelname, :has_many => :comments
或
resources :modelname, :has_many => :comments, :through => :commentable
一切都没有成功。
还有其他人遇到过这个吗?我迷失在哪里开始寻找。
非常感谢
答案 0 :(得分:4)
如果您使用的是Rails 3,则路由选择会有所不同。您可以在模型中指定关系并在routes.rb
中映射路径在Rails 3的做事方式中,你的routes.rb应该有这个:
resources :model do
resources :comments
end
您不应该在路线中指定您的关系。刷新您的服务器,您应该获得/ model / id / comments / id
之类的路由答案 1 :(得分:3)
在Rails 3中,事情有点不同。要获取网址modelname/id/comments
,您需要routes.rb
中的以下路线:
resources :modelname do
resources :comments
end
有关详细信息,请参阅this Rails Guide。它会详细介绍。