我是初学者
在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 %>
答案 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
模板。错误消息。