创建和更新不再有效。有什么建议么?或者为什么?
Create and Update no longer working. Any suggestions? Or reasons why?
我正在尝试构建一个简单的博客类型应用程序以在 rails 上学习 ruby。以前create可以,但是加了edit/update功能后,create和edit都不行了。我不确定我做错了什么。 Edit 不会更新新数据,Create 也不再接受新数据。例如:创建一个新的 post 将导致一个空白的 post 无论写什么,当向旧的 post 添加新文本时,点击提交后不会更改 post .
我的控制器:
def create
@post = Post.create(post_params)
if @post.save(post_params)
redirect_to @post
else
render 'new'
end
end
def show
@post = Post.find(post_params[:id])
end
def update
@post = Post.find(params[:id])
if @post.update_attributes(post_params)
redirect_to @post
else
render 'edit'
end
end
def edit
@post = Post.find(params[:id])
end
def post_params
params.permit(:title, :detail)
end
同时编辑和创建 html 文件呈现表单页面:
<div class="section">
<%= simple_form_for @post do |f| %>
<%= f.input :title %>
<%= f.input :detail %>
<%= f.button :submit %>
<% end %>
</div>
def create
@post = Post.new(post_params) # use Post.new, don't create already
if @post.save # if above Post is saved then redirect
redirect_to @post
else
render 'new'
end
end
def show
@post = Post.find(params[:id]) #use params[:id], not post_params[:id]
end
def update
@post = Post.find(params[:id]) #use params[:id] to find the post
if @post.update_attributes(post_params) #use post_params for attributes
redirect_to @post
else
render 'edit'
end
end
def edit
@post = Post.find(params[:id]) #use params[:id] to find post
end
private
def post_params
params.require(:post).permit(:title, :detail)
# Don't permit the ID as you don't want to change the ID.
end
问题可能出在您的 post_params
方法上。我猜你必须在允许其属性之前要求 :post
键。通常,simple_form(和其他形式的引擎)将 assemble 有效载荷如下:
{
"utf8": "✓",
"authenticity_token": "...",
"commit": "Create Post",
"post": {
"title": "Opa",
"content": "teste"
}
}
所以如果你 params.permit(:title, :detail, :id)
你会得到一个空哈希。这可能就是 post 被保存为空属性的原因。
你将不得不
params.require(:post).permit(:title, :detail)
默认情况下,url 参数(您在 /posts/:id
等路由中定义的参数)已经被允许,因此您不必允许也不需要它。
我正在尝试构建一个简单的博客类型应用程序以在 rails 上学习 ruby。以前create可以,但是加了edit/update功能后,create和edit都不行了。我不确定我做错了什么。 Edit 不会更新新数据,Create 也不再接受新数据。例如:创建一个新的 post 将导致一个空白的 post 无论写什么,当向旧的 post 添加新文本时,点击提交后不会更改 post .
我的控制器:
def create
@post = Post.create(post_params)
if @post.save(post_params)
redirect_to @post
else
render 'new'
end
end
def show
@post = Post.find(post_params[:id])
end
def update
@post = Post.find(params[:id])
if @post.update_attributes(post_params)
redirect_to @post
else
render 'edit'
end
end
def edit
@post = Post.find(params[:id])
end
def post_params
params.permit(:title, :detail)
end
同时编辑和创建 html 文件呈现表单页面:
<div class="section">
<%= simple_form_for @post do |f| %>
<%= f.input :title %>
<%= f.input :detail %>
<%= f.button :submit %>
<% end %>
</div>
def create
@post = Post.new(post_params) # use Post.new, don't create already
if @post.save # if above Post is saved then redirect
redirect_to @post
else
render 'new'
end
end
def show
@post = Post.find(params[:id]) #use params[:id], not post_params[:id]
end
def update
@post = Post.find(params[:id]) #use params[:id] to find the post
if @post.update_attributes(post_params) #use post_params for attributes
redirect_to @post
else
render 'edit'
end
end
def edit
@post = Post.find(params[:id]) #use params[:id] to find post
end
private
def post_params
params.require(:post).permit(:title, :detail)
# Don't permit the ID as you don't want to change the ID.
end
问题可能出在您的 post_params
方法上。我猜你必须在允许其属性之前要求 :post
键。通常,simple_form(和其他形式的引擎)将 assemble 有效载荷如下:
{
"utf8": "✓",
"authenticity_token": "...",
"commit": "Create Post",
"post": {
"title": "Opa",
"content": "teste"
}
}
所以如果你 params.permit(:title, :detail, :id)
你会得到一个空哈希。这可能就是 post 被保存为空属性的原因。
你将不得不
params.require(:post).permit(:title, :detail)
默认情况下,url 参数(您在 /posts/:id
等路由中定义的参数)已经被允许,因此您不必允许也不需要它。