bugfix> ruby-on-rails > 投稿

PostgresとRailsが提供する新しいjsonフィールドで作業しようとしています。これまでに行ったのは、この足場を生成し、テスト上の理由でCSRFトークンを無効にすることだけです。

rails generate scaffold Shipping name content:json

私の目標は、次のようなデータを送信することです。

curl -vX POST https://myserver.com/shipping -d '{"shipping": { "name": "test", "content" : ["test","hello"] }}' --header "Content-Type: application/json"

これは名前ではなく名前を受け入れますが、コンテンツでは受け入れません。コンテンツをフォーマットする適切な方法はありますか?

回答 1 件
  • Railsは、明示的に許可されていない「スカラー」パラメーターを除外します。通常の文字列値を試してみて、すべてが正常に機能したことは間違いありませんが、配列またはオブジェクトを送信すると、機能しなくなります。

    動作させるには、元の shipping_params を更新するだけです  これでShippingsControllerのメソッド:

    def shipping_params
      params.require(:shipping).permit(:name, content: {})
    end
    
    

    ところで、ActionController :: Parameters APIのドキュメントをご覧ください。最終的にはモデルにさらに属性を追加し、それらのキーも追加する必要があると確信しています。

    それが価値があるもののために:あなたは同様の permit! に遭遇するかもしれません  参照ドキュメントのメソッド。 a)モデルの属性を使用して承認の決定を行い、b)信頼できない人にAPIの使用を許可する場合は注意してください。最後にしたいことは、誰かが is_admin のようなものを設定できるようにすることです  ユーザーに似たモデルの列をtrueにします。

あなたの答え