在我的应用中,我正在尝试让管理员用户可以编辑“帖子”的一个属性
帖子模型是:
class PostsController < ApplicationController
before_filter :admin_user, only: [:edit, :update]
def edit
@post = Post.find(params[:id])
end
def update
@post = Post.find(params[:id])
if @post.update_attributes(params[:post][:some_attr])
flash[:success] = "Post updated"
redirect_to posts_path
else
redirect_to root_path
end
end
编辑视图是:
<% provide(:title, "Edit post") %>
<h1>Update the post</h1>
<div class="row">
<div class="span6 offset3">
<%= form_for(@post) do |f| %>
<%= f.label :some_attr %>
<%= f.text_field :some_attr %>
<%= f.submit "Save changes", class: "btn btn-large btn-primary" %>
<% end %>
当我尝试在编辑页面的some_attr test_field中输入“123”时,会出现错误:
NoMethodError in PostsController#update
undefined method `stringify_keys' for "123":String
Application Trace | Framework Trace | Full Trace
app/controllers/posts_controller.rb:22:in `update'
Request
Parameters:
{"utf8"=>"✓",
"_method"=>"put",
"authenticity_token"=>"EdTg+cFBnZY447oSDqSTPfb/PJ6VisJOrQ8kvichDrE=",
"post"=>{"some_attr"=>"123"},
"commit"=>"Save changes",
"id"=>"17"}
可能是什么问题?我错过了哪一块拼图?
由于
答案 0 :(得分:2)
我相信这一行:
@post.update_attributes(params[:post][:some_attr])
应如下所示:
@post.update_attributes(params[:post])
要对@post
执行更新,您需要为其传递完整的属性哈希值 - 而不仅仅是您正在更改的属性哈希值。
答案 1 :(得分:1)
问题在于这一行:
if @post.update_attributes(params[:post][:some_attr])
params[:post][:some_attr]
只是一个值。未指定字段。如果将行更改为
if @post.update_attributes(params[:post])
该属性应按预期更新。