0

だから、私はルビーとレールに比較的慣れていません。私が保持している唯一の知識はアクティブレコードの使用ですが、私は自分のデータベースに mongoid をいじっています。

新しいプロジェクトを作成し、アクティブなレコードをスキップして、後でモンゴイドを優先して削除する手順を実行する必要がないようにしました。

私は足場を作り、rails g scaffold user辺りを見回しました。mongo がスキーマレス データベースであることはわかっているので、モデルに移動して次のように変更しました。

class User
  include Mongoid::Document
  include Mongoid::Timestamps

  field :name,         :type => String

end

非常にシンプルで、フィールドは 1 つだけです (今のところ)。そのため、通常のルートを介してフォームにフィールドを追加<%= text_field_tag :name %> し、サーバーを再起動しましたrails s

私は開発サイトに行きましたが、すべてが正常に機能しているようです。それで、フォームを送信すると送信されます。DBを見てみると、名前欄がないだけのドキュメントが作成されています。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 行が必要なのかどうかはわかりません (正直なところ、許可されたこれらのフィールドがuser model ) .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

私が間違ったことのアイデアはありますか?これに関連するコードのみが and によって生成されたものrails newですrails g

4

1 に答える 1

1

まず、説明した変更のために Rails サーバーを再起動する必要はありません。

あなたが得ているエラーは、それparams[:user]が空である(または見つからない)ことを意味します。params[:name]development.log を確認すると、代わりに設定されていることがわかります。

これはtext_field_tag、params[:user] で値をネストするために入力に名前を付けない を使用したためです。

form_forを使用してフォームを作成していると仮定すると、代わりに次のことを行います

f.text_field :name
于 2015-04-25T21:20:33.783 に答える