[解決済み] Rails - 強いパラメータ - 入れ子オブジェクト
質問
簡単な質問があります。しかし、今のところ解決策は見つかっていません。
では、私がサーバーに送信するJSON文字列は以下のとおりです。
{
"name" : "abc",
"groundtruth" : {
"type" : "Point",
"coordinates" : [ 2.4, 6 ]
}
}
新許可方式を使うと
params.require(:measurement).permit(:name, :groundtruth)
この場合、エラーは発生しませんが、作成されたデータベース・エントリには
null
の代わりに、groundtruthの値を使用します。
設定するだけなら。
params.require(:measurement).permit!
しかし、もちろん、これでは強力なパラメータが提供するセキュリティが損なわれてしまいます。
配列を許可する方法は見つけたのですが、ネストされたオブジェクトを使う例は一つもありませんでした。これはかなり一般的な使用例であるはずなので、何らかの方法で可能であるはずです。では、どのように動作するのでしょうか?
解決方法は?
ネストされた属性を許可する場合、奇妙に聞こえるかもしれませんが、配列内でネストされたオブジェクトの属性を指定します。あなたの場合、それは次のようになります。
更新 RafaelOliveira さんの提案による。
params.require(:measurement)
.permit(:name, :groundtruth => [:type, :coordinates => []])
一方、複数のオブジェクトをネストさせたい場合は、以下のようにハッシュで囲みます。
params.require(:foo).permit(:bar, {:baz => [:x, :y]})
Railsには、これに関するかなり良いドキュメントがあります。 http://api.rubyonrails.org/classes/ActionController/Parameters.html#method-i-permit
さらに明確にするために、以下の実装を見ることができます。
permit
と
strong_parameters
そのものです。
https://github.com/rails/rails/blob/master/actionpack/lib/action_controller/metal/strong_parameters.rb#L246-L247
関連
-
[解決済み】TypeError: SymbolからIntegerへの暗黙の変換がない。
-
[解決済み] Railsサーバーがポートはすでに使用されていると言う、そのプロセスを殺すにはどうすればよいですか?
-
[解決済み] Rails ExecJS::ProgramError in Pages#home?
-
[解決済み] nil:NilClass の未定義メソッド `each'... なぜ?
-
[解決済み] Railsです。gemを使った特定バージョンのライブラリのアンインストール
-
[解決済み] Ruby on Railsのマイグレーションでデータベースのカラムの名前を変更するにはどうすればよいですか?
-
[解決済み] Ruby on Railsで現在の絶対URLを取得するにはどうすればよいですか?
-
[解決済み] エラーが発生しました。pgsqlをrailsで動作させようとすると、Peer authentication failed for user "postgres" と表示されます。
-
[解決済み】Railsの認証トークンを理解する
-
[解決済み】強いパラメータを持つ配列を許可する方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】警告:定数 ::Fixnum は非推奨 新しいモデルを生成するとき
-
[解決済み】Rails 4 RoutingError: ルートが一致しない[POST]。
-
[解決済み] gemのインストールができない - gemネイティブ拡張の構築に失敗 - そのようなファイルをロードできない -- mkmf (LoadError)
-
[解決済み] Mac OS Xにhomebrewがインストールされているかどうかを確認する方法
-
[解決済み] RailsのRootディレクトリのパス?
-
[解決済み] heroku push rejected, failed to compile Ruby/rails app
-
[解決済み] Rubyのクラスで未初期化の定数エラーが発生する
-
[解決済み] Railsです。gemを使った特定バージョンのライブラリのアンインストール
-
[解決済み] RoRにおけるSpringサーバーの機能とは?
-
[解決済み] Heroku Error R14 (Memory quota exceeded): How do I solve this?