尝试使用活动资源更新时缺少参数或值为空

param is missing or the value is empty when trying to update using active resource

我正在制作一个简单的 rails 应用程序,其中包含用于 crud 操作的简单表单和一个 rails api 将具有模型并使用来自 [=61] 的数据执行所有 crud 操作=] 申请。在应用程序中,我正在使用 ActiveResource。目前我在更新时遇到了一些问题...只有当我更新它时其他一切才能正常工作,我不知道为什么,请帮助。

api/postcontroler

class API::PostsController < ApplicationController
  before_action :set_post, only: [:show, :update, :destroy]

  # GET /posts
  # GET /posts.json
  def index
    @posts = Post.all

    render json: @posts
  end

  # GET /posts/1
  # GET /posts/1.json
  def show
    render json: @post
  end

  # POST /posts
  # POST /posts.json
  def create
    @post = Post.new(:title => params[:title], :content => params[:content])

    if @post.save
      render json: @post, status: :created, location: @post
    else
      render json: @post.errors, status: :unprocessable_entity
    end
  end

  # PATCH/PUT /posts/1
  # PATCH/PUT /posts/1.json
  def update

    if @post.update_attributes(post_params)
        render json: @post
    else
       render json: @post.errors, status: :unprocessable_entity
    end

  end

  # DELETE /posts/1
  # DELETE /posts/1.json
  def destroy
    @post.destroy

    head :no_content
  end

  private

    def set_post
      @post = Post.find(params[:id])
    end

     def post_params
      params.require(:post).permit(:title, :id, :content)
    end

end 

application/postcontroler

class PostsController < ApplicationController

    before_action :set_post, only: [:show, :update, :edit, :destroy]

    def index
        @posts = Post.all
    end

    def new
        @post = Post.new(:title => "", :content => "")
    end

    def create
        @post = Post.new(post_params)
        if @post.save
            redirect_to post_path(@post)
        else
            render "new"
        end

    end

    def show

        @comments = Comment.find(:all, :params => {:post_id => params[:id]})
    end

    def edit
    end

    def update

        @post.title = params[:title]
        @post.content = params[:content]
        if @post.save
            redirect_to post_path(@post)
        else
            render "edit"
        end
    end

    def destroy
        @post.destroy
        redirect_to :action => 'index'
    end

    private

    def post_params
      params.require("post").permit(:title, :content)
    end

    def set_post
      @post = Post.find(params[:id])
    end
end

application/edit.html.erb

<%= form_for(@post, :url=>{:action=>'update'}) do |f| %>
<%= f.label :title %><br>
<%= f.text_field :title %><br>
<%= f.label :content %><br>
<%= f.text_area :content %><br>
<%= f.submit %>
<% end %>

申请途径

resources :posts do
        resources :comments
    end

api 航线

namespace :api, :defaults => {:format => :json} do
    resources :posts, except: [:new, :edit] do
        resources :comments, except: [:new, :edit]
    end
  end

应用程序活动资源post模型

class Post < ActiveResource::Base
    self.site = "http://localhost:3001/api"
end

我在端口 3000 和 api 在 3001 启动应用程序,当我尝试更新时发生这种情况

申请中 application

和这个 api api

有什么问题?

您的两个控制器的格式混淆了。

api/postcontroller 需要 non-nested 参数,而 application/postcontroller 需要嵌套参数,但您以相反的方式传递它们。所以api版本失败,因为require(:post)失败,应用版本失败,因为你要找的数据在`params[:post][:title],而不是参数[:标题].

尝试交换两种更新方法的主体(通过适当的修改,您不希望应用程序服务 Json 等)。