Rails + Mongoid + Сильный сбой Parms
Итак, я относительно новичок в рубине и рельсах. Я играю с mongoid для своей базы данных, хотя единственное, что я знаю, - это использование активной записи.
Я создал новый проект, обязательно пропустив активную запись, чтобы мне не пришлось выполнять шаги, чтобы удалить его позже в пользу mongoid.
Я создал эшафот rails g scaffold user
и пошел по пути, оглядываясь. Так как я знаю, что mongo - это БД без схемы, я пошел к модели и изменил ее следующим образом:
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
На данный момент, не помня, нужно ли мне перезагружать сервер или нет - я делаю, просто чтобы быть в безопасности. Когда сервер запущен, я захожу на сайт и отправляю форму, которая говорит мне:
param is missing or the value is empty: user
Не уверен, что я здесь сделал неправильно, или если с mongoid мне даже нужна строка.require (честно говоря, я не знаю, что она делает, за исключением того, что я думал, что это требует, чтобы эти поля в разрешении передавались в пользовательская модель), как удаление.require часть и просто делать params.permit(:name)
обрабатывает информацию как следует.
$ ruby -v
ruby 2.2.2p95 (2015-04-13 revision 50295) [x86_64-linux]
$ rails --version
Rails 4.2.1
и мой GemFile:
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
а также rails g
1 ответ
Прежде всего вам не нужно перезапускать сервер rails для каких-либо изменений, которые вы описали.
Ошибка, которую вы получаете, просто означает, что params[:user]
пуст (или отсутствует). Если вы проверите ваш файл development.log, вы увидите, что params[:name]
устанавливается вместо
Это потому, что вы использовали text_field_tag
, который не называет входные данные, чтобы вкладывать значение в params[:user].
Предполагая, что вы используете form_for
чтобы создать свою форму, вы хотите вместо этого сделать
f.text_field :name