2012-04-28 3 views
0

я получаю ошибкуне определен метод рельсы

undefined method `favorite_relationships_path' 

, когда я показываю эту форму:

<%= form_for(current_user.favorite_relationships.build(lesson_id: @lesson.id), 
      remote: true) do |f| %> 
    <div><%= f.hidden_field :lesson_id %></div> 
    <%= f.submit "Favorite", class: "btn btn-large btn-primary" %> 
<% end %> 

я не уверен, почему. У меня есть контроллер называется favorite_relationships_controller.rb и файл модели, favorite_relationship.rb с кодом

class FavoriteRelationship < ActiveRecord::Base 
    attr_accessible :lesson_id 
    belongs_to :user 
    belongs_to :lesson 
end 

Моя модель Пользователь также имеет:

has_many :favorite_relationships 
    has_many :lessons, :through => :favorite_relationships 

Я действительно не знаю, почему им получить, что ошибка. Помощь была бы оценена.

ответ

2

Недостаточно определить контроллеры, действия и представления. Вы должны определить маршруты в config/routes.rb для подключения URL-адресов к вашим контроллерам/действиям. Определение ресурсов RESTful с помощью resources :favourite_relationships в вашем файле маршрутизации - это причина, по которой Rails генерирует помощники *_path и *_url; пока вы этого не сделаете, вам не удастся связаться с вашими приложениями, и вы не сможете создавать маршруты на основе ваших моделей.

Ваш файл маршрутов должен выглядеть следующим образом:

MyApp::Application.routes.draw do 
    resources :favourite_relationships 
end 

Это создает типичные "CRUD" маршруты, необходимые для RESTful ресурса:

favourite_relationships  GET /favourite_relationships(.:format)   {:action=>"index", :controller=>"favourite_relationships"} 
          POST /favourite_relationships(.:format)   {:action=>"create", :controller=>"favourite_relationships"} 
new_favourite_relationship GET /favourite_relationships/new(.:format)  {:action=>"new", :controller=>"favourite_relationships"} 
edit_favourite_relationship GET /favourite_relationships/:id/edit(.:format) {:action=>"edit", :controller=>"favourite_relationships"} 
    favourite_relationship GET /favourite_relationships/:id(.:format)  {:action=>"show", :controller=>"favourite_relationships"} 
          PUT /favourite_relationships/:id(.:format)  {:action=>"update", :controller=>"favourite_relationships"} 
          DELETE /favourite_relationships/:id(.:format)  {:action=>"destroy", :controller=>"favourite_relationships"} 
+0

Ах, мы писали почти одинаковые ответы одновременно! :) – tiredpixel

+0

ой, я совсем забыл об этом. Я только думал о URL-адресе в файле маршрутов, т. е. имел его под чем-то вроде localhost: 3000/lessons/favorites. большое спасибо! – Sasha

2

Rails имеет _path и _url хелперы для маршрутов, которые установлены в config/routes.rb. Вам необходимо убедиться, что вы определили маршруты для FavouriteRelationshipController; что-то вроде:

resources :favourite_relationships 

Вы можете проверить маршруты, определенные для приложения с помощью команды rake routes.

Дополнительную информацию о маршрутизации вы найдете в руководстве Rails Routing from the Outside In.

+0

ой, я совсем забыл об этом. Я только думал о URL-адресе в файле маршрутов, т. е. имел его под чем-то вроде localhost: 3000/lessons/favorites. большое спасибо! – Sasha

Смежные вопросы