缺少新Rails 3应用程序的模板?

Tri*_*rip 10 ruby validation ruby-on-rails ruby-on-rails-3

刚尝试在我的模型中编写一个简单的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"
Run Code Online (Sandbox Code Playgroud)

错误在Rails3中没有单独的视图吗?我以为那是Rails魔法..

好奇,如果有人有这个问题,或知道如何正确验证.

我的型号:

validates_presence_of :category, :name, :url
Run Code Online (Sandbox Code Playgroud)

我的控制器:

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
Run Code Online (Sandbox Code Playgroud)

更新

有趣的是,我'触摸app/views/posts/create.html.haml',现在它删除了错误,而是加载了该页面.但为什么会这样呢?或者更重要的是,我怎样才能将它重新定向回到new_post_path(@post)呢?

Mar*_*rth 12

如果你的

if @post.valid? && current_user.posts << @post
Run Code Online (Sandbox Code Playgroud)

line返回false,不调用render()或redirect_to().然后,Rails的默认行为是呈现与您的方法同名的视图.那就是create.BUILDER.FORMAT.

尝试删除该行.请改用此代码:

@post = current_user.posts.new(params[:post])
respond_to do |format|
  if @post.save
    ...
Run Code Online (Sandbox Code Playgroud)

或写一个其他案例

render :action => "new"
Run Code Online (Sandbox Code Playgroud)