Отсутствуют шаблоны из нового приложения Rails 3? - PullRequest
10 голосов
/ 23 июля 2010

Только что попытался написать простое 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, не так ли? Я думал, что это была магия Rails ..

Интересно, кто-нибудь сталкивался с этой проблемой или знал, как ее правильно проверить?

Моя модель:

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), как должен?

Ответы [ 3 ]

12 голосов
/ 25 июля 2010

Если ваш

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
    ...

Или напишите еще случай с

render :action => "new"
2 голосов
/ 25 июля 2010

Ах, понял. Это потому, что он никогда не был действительным, поэтому он возвращался к самому себе при создании, не находил там шаблона и выдает ошибку. Правильный способ настройки 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
1 голос
/ 23 июля 2010

Нет, у них нет отдельных видов.Так у вас есть app/views/posts/create.html.erb файл?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...