2

在我的应用程序中,我试图让管理员用户可以编辑“帖子”的一个属性

后模型为:

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"}

可能是什么问题呢?我错过了哪一块拼图?

谢谢

4

2 回答 2

2

我相信这条线:

@post.update_attributes(params[:post][:some_attr])

应该是这样的:

@post.update_attributes(params[:post])

要对 执行更新@post,您需要为其传递整个属性散列 - 而不仅仅是您要更改的属性。

祝你好运!

于 2012-05-19T02:53:02.783 回答
1

问题是这一行:

 if @post.update_attributes(params[:post][:some_attr])

params[:post][:some_attr]只是一个值。未指定字段。如果将行更改为

 if @post.update_attributes(params[:post])

该属性应按预期更新。

于 2012-05-19T02:53:12.853 回答