Рельсы 3, Полиморфные ассоциации, и нет совпадений маршрутов - PullRequest
4 голосов
/ 20 апреля 2011

Я изучаю Rails уже около 6 недель, так что все еще новичок!

Я слежу за скринкастом Райана Бейтса о Полиморфных Ассоциациях, но при переходе к /model/xx/comments.

я получаю ошибку «Нет совпадений маршрутов»

После двух дней кругооборота с этим я в полном замешательстве - кажется, все на месте.

Комментарии модели:

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

Явно определяющие комментарии в маршрутах. Rb

resources :comments

и различные комбинации терминов в маршрутах. Rb

resources :modelname, :has_many => :commentables

или

resources :modelname, :has_many => :comments

или

resources :modelname, :has_many => :comments, :through => :commentable

все безуспешно.

Кто-нибудь еще сталкивался с этим? Я заблудился относительно того, где начать искать.

Большое спасибо

Ответы [ 2 ]

4 голосов
/ 20 апреля 2011

Если вы используете Rails 3, маршрутизация выполняется по-другому. Вы указываете отношения в модели и отображаете свои маршруты в маршрутах. Rb

В Rails 3 для ваших вещей, ваш rout.rb, вы должны иметь это:

 resources :model do
    resources :comments
 end

Вы не должны указывать свои отношения в маршрутах. Обновите свой сервер, и вы должны получить маршрут как / model / id / comments / id

3 голосов
/ 20 апреля 2011

В Rails 3 все немного по-другому.Чтобы получить URL modelname/id/comments, вам понадобится следующий маршрут в вашем routes.rb:

resources :modelname do
  resources :comments
end

См. это руководство по Rails для получения дополнительной информации, оно идет намного дальшеподробно.

...