2013-12-22 4 views
1

В соответствии с уникальными ресурсами http://guides.rubyonrails.org/ Я создал сообщение этой командой rails g scaffold post -singular, но создал несколько ресурсов. Так что я изменил его наRails Singular Resources не работает должным образом

get 'post', to: 'posts#show' 

    resource :post 

По словам гида, это должно показать пост, но на самом деле это дает ошибку о том, что Couldn't find Post without an ID

Также он говорит, что я могу использовать тот же контроллер для сингулярного маршрута (/ пост) и множественный маршрут (/ posts/45), как я могу это сделать?

+0

НЕ нарушайте соглашение, если вам действительно не нужно это делать. Он окончательно укусит вас. –

ответ

2

При посещении единственного маршрута, который указывает на показ, вам не предоставляется ID, поэтому Post.find(params[:id]) не будет работать и предоставит вам эту ошибку «Не удалось найти сообщение без идентификатора». Поскольку вам не задан параметр ID, вам необходимо либо указать код жесткого кода, например Post.find(1), либо сделать что-то вроде current_user.post, если у вас есть пользователь, который имеет сообщение__события или принадлежит_созданию.

Если вы хотите использовать как особый маршрут '/ post', так и множественный маршрут '/ posts/45', тогда вам нужно будет учитывать оба случая в вашем действии show, поскольку оба маршрута указывают на то же действие , Ваше действие будет выглядеть так:

#app/controllers/posts_controller.rb 
def show 
    @post = params[:id] ? Post.find(params[:id]) : Post.find(45) 
end 
Смежные вопросы