Rails + Mongoid +强Parms失败

时间:2015-04-25 21:03:28

标签: ruby-on-rails-4 strong-parameters mongoid4

所以,我对ruby和rails相对较新。我正在为我的数据库玩mongoid,尽管我所掌握的唯一知识是使用活动记录。

我创建了一个新项目,确保跳过活动记录,以便我不必执行以后删除它的步骤,而不是mongoid。

我创建了一个脚手架whatever并继续环顾四周。因为我知道mongo是一个无模式的数据库,所以我去了模型并对其进行了修改:

rails g scaffold user

非常简单,只有一个字段(现在)。所以,我通过正常路线class User include Mongoid::Document include Mongoid::Timestamps field :name, :type => String end 将字段添加到我的表单中,然后重新启动我的服务器<%= text_field_tag :name %>

我去了开发网站,一切看起来都应该正常工作。所以,我提交表格并提交。查看数据库,只创建一个没有名称字段的文档。记住rails s有关活动记录,我转到了strong attributes并对其进行了修改:

users_controller.rb

此时,不记得我是否需要重新启动服务器 - 我这样做,只是为了安全起见。服务器运行后,我转到该站点,然后提交表单,它告诉我:

def user_params params.require(:user).permit(:name) end

不确定我在这里做错了什么,或者如果有mongoid我甚至需要.require线(说实话我不知道它做了什么,除了我认为它要求许可证中的这些字段正在提交给用户模型)删除.require部分,只需按param is missing or the value is empty: user处理信息。

params.permit(:name)

和我的GemFile:

$ ruby -v
ruby 2.2.2p95 (2015-04-13 revision 50295) [x86_64-linux]
$ rails --version
Rails 4.2.1

我做错了什么想法?只有与此相关联的代码才是source 'https://rubygems.org' gem 'rails', '4.2.1' gem 'sass-rails', '~> 5.0' gem 'uglifier', '>= 1.3.0' # Use CoffeeScript for .coffee assets and views gem 'coffee-rails', '~> 4.1.0' gem 'jquery-rails' gem 'turbolinks' gem 'jbuilder', '~> 2.0' gem 'sdoc', '~> 0.4.0', group: :doc gem 'mongoid', '~> 4.0.0' # Use ActiveModel has_secure_password gem 'bcrypt', '~> 3.1.7' #gem 'rspec-its' # Use Unicorn as the app server #gem 'unicorn' # Use Capistrano for deployment # gem 'capistrano-rails', group: :development #gem 'font-awesome-rails', '~> 4.3.0.0' #gem 'foundation-rails' group :development, :test do gem 'rspec-rails', '~> 3.2.1' gem 'byebug' gem 'web-console', '~> 2.0' gem 'spring' gem 'factory_girl_rails', '~> 4.5.0' end group :development do gem 'quiet_assets', '~> 1.1.0' end group :test do gem 'capybara', '~> 2.4.4' gem 'capybara-email', '~> 2.4.0' gem 'shoulda-matchers', '~> 2.8.0' end rails new

生成的代码

1 个答案:

答案 0 :(得分:1)

首先,您无需为已描述的任何更改重新启动rails服务器。

您获得的错误仅表示params[:user]为空(或缺失)。如果您检查您的development.log,您会看到设置了params[:name]

这是因为您使用了text_field_tag,它没有为输入命名,以便将值嵌套在params [:user]中。

假设您使用form_for创建表单,则需要执行

f.text_field :name