我已经为new和update创建了simple_form_For公用, 当前,它可以很好地用于新的,但是对于编辑/更新,它调用了错误的URL。
class NewsfeedsController < ApplicationController
before_action :find_post, only: [:show, :destroy, :edit, :update]
def index
@posts = Post.all.order("created_at DESC")
end
def show
# before_action is taking care of all 4 i.e(sho,edit,update and destroy)..Keeping it DRY
end
def new
@post = Post.new
end
def create
@post = Post.new(post_params)
if @post.save
redirect_to root_path
else
render 'new'
end
end
def edit
end
def update
if @post.update(post_params)
redirect_to newsfeed_path(@post)
else
render 'edit'
end
end
def destroy
end
private
def post_params
params.require(:post).permit(:content)
end
def find_post
@post = Post.find(params[:id])
end
end
在Form.html
<%= simple_form_for @post, url: newsfeeds_path(@post) do |f| %>
<%= f.input :content,label: false, placeholder: "write your post here..." %>
<%= f.button :submit %>
<% end %>
在浏览器上的inspect元素上, 我做错了动作,
它必须是action =“ / newsfeeds / 7”
请指导
答案 0 :(得分:0)
由于您使用通用的_form进行更新和更新,因此需要分别在url中添加条件,
<%= simple_form_for @post, url:(@post.new_record? ? newsfeeds_path : newsfeed_path(@post)) do |f| %>
这将帮助您同时使用new和update方法。 希望这会有所帮助。
答案 1 :(得分:-1)
更新操作应为newsfeed_path(@post)
,而不是newsfeeds_path(@post)
。请更正并重试!
<%= simple_form_for @post, url: newsfeed_path(@post) do |f| %>
希望有帮助!