我是关于rails的新手,我尝试为我的用户发帖,但是编辑选项出错了。创建,索引,显示和删除有效,但没有编辑错误:
param丢失或值为空:post(在我的post_params上)
我的_form.html.erb(用于创建和编辑):
<%= form_for @post do |f| %>
<%= render 'shared/post_error' %>
<%= f.hidden_field :user_id, :value => @current_user.id %>
<%= f.label :content, "Description :" %><br>
<%= f.text_area :content, size: "60x12", placeholder: "Parlez un peu de vous" %><br>
<%= f.submit "Créer l'annonce" %>
我的帖子控制器:
class PostsController < ApplicationController
before_action :logged_in?, only: [:index, :show, :new, :create, :edit, :update, :destroy]
def index
@posts = Post.paginate(page: params[:page])
end
def show
@post = find_post
end
def new
@post = Post.new
end
def create
@post = Post.new(post_params)
if @post.save
flash[:success] = "Annonce créée avec succès"
redirect_to @post
else
render 'new'
end
end
def edit
@post = Post.update(post_params)
end
def update
@post = Post.update(post_params)
if @post.save
flash[:success] = "Annonce modifiée avec succès"
redirect_to @post
else
render 'edit'
end
end
def destroy
Post.find(params[:id]).destroy
flash[:success] = "Annonce supprimée avec succès"
redirect_to root_path
end
private
def post_params
params.require(:post).permit(:content, :user_id)
end
def find_post
@post = Post.find(params[:id])
end
end
我尝试了很多东西,但没有任何作用,错误在一个和First argument in form cannot contain nil or be empty
之间发生了变化
提前感谢您的帮助
答案 0 :(得分:1)
按照正确的方式
以正确的方式编辑控制器
class PostsController < ApplicationController
before_action :logged_in?
before_action :find_post, only: [:show, :edit, :update, :destroy]
def index
@posts = Post.all.paginate(page: params[:page])
end
def show
end
def new
@post = Post.new
end
def create
@post = Post.new(post_params)
if @post.save
flash[:success] = "Annonce créée avec succès"
redirect_to @post
else
render 'new'
end
end
def edit
end
def update
if @post.save
flash[:success] = "Annonce modifiée avec succès"
redirect_to @post
else
render 'edit'
end
end
def destroy
@post.destroy
flash[:success] = "Annonce supprimée avec succès"
redirect_to root_path
end
private
def post_params
params.require(:post).permit(:content, :user_id)
end
def find_post
@post = Post.find(params[:id])
end
end
和@current_user
对象我认为它将current_user
喜欢
<%= f.hidden_field :user_id, :value => current_user.id %>
答案 1 :(得分:0)
编辑操作不应该用于更新,它应该用于获取将要更新的对象以便更改编辑操作
首先确保用户logged_in?
,然后才能执行任何操作,before_action :logged_in?
应该先于before_action :find_post
before_action :logged_in?
before_action :find_post, only: [:show, :edit, :update, :destroy]
def edit
#@post = Post.update(post_params)
end
def update
@post = Post.update(post_params)
if @post.save
flash[:success] = "Annonce modifiée avec succès"
redirect_to @post
else
render 'edit'
end
end
另请确保user_id: @current_user.id
或<%= f.hidden_field :user_id, :value => current_user.id %>
这取决于您在current_user
gem完成身份验证ID后定义devise
的方式,那么它应该是current_user