尝试使用活动资源更新时缺少参数或值为空
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 等)。
我正在制作一个简单的 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 等)。