rails模型的更新属性

时间:2012-05-19 02:47:35

标签: ruby-on-rails

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

帖子模型是:

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

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

由于

2 个答案:

答案 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])

该属性应按预期更新。