5

我只是在《Rails入门》教程中尝试使用 Ruby on Rails 。我遵循了所有步骤,但在 PostsController#create 中不断收到错误 TypeError

当我在步骤 5.6 在控制器中保存数据时会发生这种情况。

我的 PostsController.rb 看起来像这样:

class PostsController < ApplicationController

  def new
  end

  def create
    @post = Post.new(post_params)

    @post.save
    redirect_to @post
  end

  private
  def post_params
    params.require(:post).permit(:title, :text)
  end
end

我在 localhost:3000/posts/new。我正在请求 POST,但失败并显示以下内容:

无法将符号转换为字符串

app/controllers/posts_controller.rb:15:in `post_params'
app/controllers/posts_controller.rb:7:in `create'

加载以下文件时发生此错误:发布

你可以在我的 GitHub repo上找到我所有的代码。

请帮忙 :(

4

1 回答 1

7

您正在使用 rails 版本 3.2.xx,在 rails 版本 3.2.xx 上不包含 strong_parameters gem

请注意, def post_params 是私有的。这种新方法可以防止攻击者通过操纵传递给模型的哈希来设置模型的属性。有关详细信息,请参阅有关强参数的博客文章。


  1. 添加gem "strong_parameters"到您的 Gemfile,然后运行bundle install

  2. 包括ActiveModel::ForbiddenAttributesProtection在您的模型中或创建config/initializers/strong_parameters.rb并放置:

    ActiveRecord::Base.send(:include, ActiveModel::ForbiddenAttributesProtection))

  3. config.active_record.whitelist_attributes = falseconfig/application.rb

https://github.com/rails/strong_parameters

于 2013-07-01T12:01:47.210 回答