rails中的“模板缺失错误”

时间:2018-01-18 06:16:27

标签: ruby-on-rails ruby ruby-on-rails-3

我是初学者 在routes.rb我有

root 'post#index'
resources :posts

当我点击帖子的空标题的“新帖子”时,我收到类似

的错误
Missing template posts/new, application/new with {:locale=>[:en], :formats=>[:html], :variants=>[], :handlers=>[:erb, :builder, :raw, :ruby, :coffee, :jbuilder]}. Searched in: * "/home/supranimbus12/RoR/instagram_app/app/views" * "/home/supranimbus12/.rvm/rubies/ruby-2.3.0/lib/ruby/gems/2.3.0/gems/devise-4.4.0/app/views"

我的posts/new.html.erb文件,如

<h2>New Post</h2>

<hr>

<%= form_for @post do |f| %>
    <% f.label :description %>
    <% f.textarea :description %>
    <hr>
    <% f.submit %>


<% end %>

1 个答案:

答案 0 :(得分:0)

1-将路线更改为: -

root 'post#index'
resources :posts, except: [:index]

因为您已经定义为索引操作的根

2-现在为新行动

def new
@post =  Post.new
end

3-你app/view/posts/new.html.erb

<h2>New Post</h2>
<hr>
    <%= form_for @post do |f| %>
        <% f.label :description %>
        <% f.textarea :description %>
        <hr>
        <% f.submit %>
    <% end %>

3 - 点击提交按钮后,它将创建动作,

注意: - 因为如果form_for object是新的,object会自动点击以创建操作,否则它会点击update操作,这就是为什么我们通常使用此表单作为部分用于编辑和新行动

def create
  @post = Post.new(post_params)
  if @post.save
   flash[:notice] = "post saved successfully!"
   redirect_to @post
  else
   flash[:error] = @post.errors.full_messages.to_sentence
   render 'new'
end

private

def post_params
  params.require(:post).permit!
end

允许所有数据为强参数

创建私有方法
post_params

如果帖子保存在db中,redirect_to @post将转到show操作,因为它会生成类似post/:id的网址,否则会再次呈现给new模板。错误消息。