Просто испытанная запись простого validates_presence_of в моей модели, и когда ошибки пытаются представить, это называет это:
Template is missing
Missing template posts/create with {:locale=>[:en, :en], :handlers=>[:builder, :rjs, :erb, :rhtml, :rxml, :haml], :formats=>[:html]} in view paths "/Users/johnsmith/Sites/shwagr/app/views"
Ошибки не имеют отдельных представлений в Rails3, делают их? Я думал, что это было волшебством направляющих..
Любопытный, если кто-либо имел эту проблему или знал, как заставить ее правильно проверить.
Моя модель:
validates_presence_of :category, :name, :url
Мой контроллер:
def new
@post = Post.new
respond_to do |format|
format.html # new.html.erb
format.xml { render :xml => @post }
end
end
def create
@post = Post.new(params[:post])
if @post.valid? && current_user.posts << @post
respond_to do |format|
if @post.save
format.html { redirect_to(@post, :notice => 'Post was successfully created.') }
format.xml { render :xml => @post, :status => :created, :location => @post }
else
format.html { render :action => "new" }
format.xml { render :xml => @post.errors, :status => :unprocessable_entity }
end
end
end
end
Обновление
Интересный, я 'касаюсь app/views/posts/create.html.haml', и теперь он удалил ошибку и вместо этого загружает ту страницу вместо этого. Но почему был бы он? Или что еще более важно, как я могу сделать, это просто перенаправить назад к new_post_path (@post) как он должно?
Если ваша
if @post.valid? && current_user.posts << @post
строка возвращает false, не вызывается render() или redirect_to(). Тогда поведение Rails по умолчанию заключается в рендеринге представления с тем же именем, что и ваш метод. Это будет create.BUILDER.FORMAT
.
Попробуйте удалить эту строку. Вместо нее используйте этот код:
@post = current_user.posts.new(params[:post])
respond_to do |format|
if @post.save
...
Или напишите else case с
render :action => "new"
А, понятно. Это потому, что он никогда не был действителен, поэтому он возвращался к самому себе при «создании», не находил там шаблона и выходил из строя. Правильный способ настройки def create:
def create
@post = Post.new(params[:post])
if @post.valid? && current_user.posts << @post
respond_to do |format|
if @post.save
format.html { redirect_to(@post, :notice => 'Post was successfully created.') }
format.xml { render :xml => @post, :status => :created, :location => @post }
else
format.html { redirect_to new_user_post_path(:current) }
format.xml { render :xml => @post.errors, :status => :unprocessable_entity }
end
end
else
render :action => 'new'
end
end
Нет, у них нет отдельных представлений. Итак, у вас есть файл app / views / posts / create.html.erb
?