Simple_form_for操作在Rails中的编辑上输入了错误的URL

时间:2019-01-05 11:57:36

标签: ruby-on-rails ruby updates edit simple-form

我已经为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”

请指导

2 个答案:

答案 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| %>

希望有帮助!