2016-06-11 12 views
0

APIのみのRails 5アプリケーションで作業しています - はい、わかっています。私はしばらくRailsの周りにいませんでしたので、私は完全に忘れてしまったパラメータのネストされたハッシュにぶつかったときに、ちょっとした遅れを追いかけていました。しかし、後に多くの嘆きとグーグルで、私は/がいることを思い出し発見Rails 5で期待されるparams構造体のフォーマット

{ "username": "myUsername", "password": "myPassword" } 

:私はUserを作成したいと、私は、以下のパラメータ(のは、単純化のためにそれJSONにしましょう)とPOSTリクエストを発行しようと思いました私は、次のことを渡すことになってる:

{ "user": { "username": "myUsername", "password": "myPassword" } } 

順番に次

def user_params 
    params.request(:user).permit(:username, :password) 
end 

を幸せいます。

私はそれで大丈夫です。これはモバイルアプリ用のプライベートAPIになる予定で、誰にでも公開できるとは思っていません。しかし、私はWeb上で他の(通常は安らかな)APIを熟読してきましたが、いずれもネストされたmodelビジネスを続けていません。私は間もなく、別のプロジェクトのパブリックAPIに取り組んでいます。その構造を必要とする特別な理由があるのか​​どうかと疑問を抱いていました。

答えて

0

params[:user]は、コントローラ、アクション、フォーマットなどの魔法のパラメータとの衝突の危険なしに、ユーザのすべてのパラメータを参照するのが一般に便利です。

あなたはJSONは、あなたの場合はレールが(ハッシュにユーザ属性に一致するパラメータをラップする要求のために、あなたのコントローラに

wrap_parameters format: [:json] 

を追加する場合は、APIクライアント

のために、これは簡単にするためにparameter wrappingを使用することができます

コントローラは、UsersControllerと呼ばれていません。使用するクラスまたはラップするパラメータをアクションコントローラに伝える必要があります)。これにより、コントローラコードは変更されずに残されますが、APIクライアントは「裸の」パラメータを送信することができます。

これをアプリケーション全体でグローバルに有効にすることもできます。

+0

これは私が引き続き 'user_params()'をそのまま使用でき、その利点と強力なパラメータをすべて保持できることを意味しますか? – Morpheu5

+1

それは正しいです。 –

関連する問題