Я пишу простой веб-сайт, в котором пользователи (прошедшие проверку подлинности с помощью Devise) могут создавать сообщения. После создания нового сообщения я столкнулся с этой ошибкой, в которой он не будет перенаправляться на сообщение. Вот мои Сообщения контроллер:rails - NoMethodError в PostsController # create undefined method `post_url '
class PostsController < ApplicationController
before_filter :authenticate_user!
def new
@post = current_user.posts.new
end
def create
@post = current_user.posts.new(post_params)
if @post.save
redirect_to @post
end
end
def show
@post = Post.find_by_id(params[:id])
end
private
def post_params
params.require(:post).permit(:title, :content)
end
end
Вот мой routes.rb:
Rails.application.routes.draw do
devise_for :users
resources :users do
resources :posts
end
root 'posts#new'
end
Поскольку сообщения ресурс вложен в пользователях я думал, что, возможно, я должен иметь это в моем контроллере:
if @post.save
redirect_to [email protected]
end
Но это создает ошибку SyntaxError в PostsController # create.
Может ли кто-нибудь увидеть проблему, которая препятствует перенаправлению контроллера на сообщение после его создания? Любая помощь приветствуется.
Похоже, что он должен работать, но теперь я получаю: Нет совпадения маршрутов {: action => "show",: controller => "posts",: id => nil,: user_id => #} отсутствуют требуемые ключи: [: id] По какой-то причине кажется, что идентификатор передается неправильно. –
@AdamLazarus Да, он ищет идентификатор пользователя. Я отредактировал ответ, пожалуйста, попробуйте один раз. – dp7
Не повезло! Он по-прежнему дает ту же ошибку. Я попробовал это с [current_user, @post], и это тоже не сработало. В сообщении об ошибке указано: id => nil и отсутствуют необходимые ключи: [: id], так что это не проблема с тем, что идентификатор новой почты не передается на маршрут правильно? –