問題タブ [respond-with]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ruby-on-rails - Rails 3 で to_json レスポンスをカスタマイズする方法
私は使用してrespond_with
おり、データを正しく取得するためにすべてが正しく接続されています。json
返された,xml
およびフォーマットを DRYにカスタマイズしたいのですが、限られたandfoobar
を使用してそれを行う方法がわかりません。これらは、データが単純な場合には優れていますが、検索結果が複雑な場合は、私が望むものには達しません。:only
:include
has_many
画像の投稿があるとしましょう
私はこれを行うことができるように、応答に画像を含めたい:
しかし、画像オブジェクト全体を送信したくはありません。URLだけです。これに加えて、次のようなこともできるようになりたいです (疑似コード):
…しかし、すべてドライな方法で。古い Rails プロジェクトでは、XML ビルダーを使用して出力をカスタマイズしましたが、json、xml、html で複製するのは正しくないようです。Railsの達人がRails 3に何かを入れたのを想像する必要がありますが、この種の動作については私は気づいていません。アイデア?
ruby-on-rails - Rails ActionController の Respond_with の操作とテスト
この質問の冗長性について事前にお詫び申し上げます。辛抱していただければ、実際には非常に単純であることがわかると思います...私のRailsドメインの知識が限られているため、説明するのが難しいだけです。
8 月 6 日付の ActionController コミットでこのコメントが与えられた場合:
使用する非常に基本的なコントローラーを変更しましたrespond_with
。params
Railsの自動生成されたテストが更新および作成メソッドに空を渡そうとすると、2つの仕様が失敗することを除いて、すべてが正常に機能しているようです。この動作は単純な if save/else で修正できますが、この「新しい」機能を理解しようとしています。デフォルトの仕様は時代遅れの方法で書かれている可能性があると思います。
コミットコメントから: " Since the request is a POST, respond_with will check wether @people resource have errors or not. If it has errors, it will render the error object with unprocessable entity status (422).
"
したがって、POST の下の最後のテスト/仕様 (以下) までスクロールすると、「処理不能なエンティティ ステータス (422)」をテストして合格し、すべてが桃色になるように書き直すことができますか?
私のコントローラー:
仕様のテスト:
これは clowns_controller_spec.rb の一部です:
ruby-on-rails - Rails3のrespond_withを理解する
ActionControllerの新しいrespond_with
メソッドを利用しています...アクション(保存)が成功した場合と失敗した場合に何をレンダリングするかをどのように決定しますか?
足場で生成された仕様(以下に含まれています)を通過させようとしているので、それを理解できるようにするためだけにお願いします。アプリは正常に動作していますが、奇妙なこと/carriers
に、検証が失敗するとレンダリングされているように見えます(少なくともブラウザーのURLはそれを示しています)。それでも、仕様は期待してい"new"
ます(そして、私もそうです)が、代わりにを受け取ってい<"">
ます。スペックを変更し""
ても失敗することが予想されます。
そのページをレンダリングする/carriers
と、予想どおりに検証に失敗したフィールドの横にerror_messagesが表示されます。
respond_with
ここで何が起こっているのかを知っている人はいますか?
失敗している仕様:
このエラーで:
ruby-on-rails - Respond_withなどのメソッドをオーバーライドしてRails 3コントローラをDRYする方法は?
Rails 3 アプリケーション用の JSONP API を作成しようとしています。現在、コントローラーには、次のパターンに従う多くのアクションがあります。
:callback => params[:callback]
これはそのまま機能しますが、すべてのアクションの への呼び出しでを繰り返さなくて済むように、DRY したいと思いrespond_with
ます。これどうやってするの?
更新:上記のコードの醜い点の 1 つは、:callback => params[:callback]
JSON だけでなく、任意の応答形式に対してオプションが渡されることです。次のコードはおそらくより正確です。
この問題に対処するために考えた方法がいくつかありますが、それらを機能させる方法がわかりません。
- パラメーターを自動的に含めるオプションを
render
受け入れるように (おそらくアプリケーション コントローラーで)オーバーライドします。このようにして、上記のコードを次のように変更できます。これはやや短いです。:jsonp
:callback => params[:callback]
to_json
私の問題を解決するためにオーバーライドするレスポンダーを作成してください。そうすれば、ブロックを省略して電話をかけるだけrespond_with(@users, :responder => 'MyResponder')
で問題を解決できます。または、 plataformatec の Responders gemを使用してアプリケーション レスポンダーにこのコードを含めることもできるので、respond_with(@users)
それだけで十分です。
ruby-on-rails-3 - Rails3とRespond_withの問題
2つのユーザーインターフェイスを持つアプリケーションがあります。
1つ目は通常のユーザー向けで、2つ目はiPhoneユーザー向けです。
コントローラ内でコードをリファクタリングして、respond_toの代わりにrespond_with宣言を使用するまで、すべてが正常に機能していました。
アプリケーションはまだhtmlインターフェイス(:format =>:html)で動作していますが、iphoneインターフェイス(:format =>:iphone)では動作していません。
iPhoneで、次のアクション(:index、:new、:edit、:show)を実行すると、機能します。
しかし、(:create、:update、:destroy)を実行すると、テンプレートが見つからないというエラーが表示されます(たとえば、create.iphone.haml)。
私のコントローラーには
そして、例えば、編集と更新のアクション
実際、:iphone形式は:htmlのように処理され、ドキュメントに指定されているto_formatメソッドを呼び出さないようにしたいと思います。
ruby-on-rails-3 - to_xmlをオーバーライドして、返されるフィールドを制限します
ruby1.9.2とrails3を使用して、レコードがjsonまたはxmlとしてアクセスされたときに返されるフィールドを制限したいと思います(2つの形式のみが許可されています)。
この非常に便利な投稿でresponse_withを紹介しました。オンラインのどこかで、一部のフィールドを包括的に許可/拒否するための良い方法は、クラスのas_jsonまたはto_xmlをオーバーライドし、フィールドを制限するために:onlyまたは:exceptを設定することです。
例:
これはまさに私が探しているものであり、jsonで機能しますが、xml "index"(GET /widgets.xml)の場合、空のウィジェット配列で応答します。to_xmlオーバーライドを削除すると、期待どおりの結果が得られます。何か間違ったことをしているのですか、および/またはWidgets.to_xmlオーバーライドがArray.to_xmlの結果に影響するのはなぜですか?
私はこれを使用して回避することができます
しかし、それが非常に乾燥した方法だとは思わないでください。
xml - XMLではなくHTMLとして処理するRailsコントローラー
最近、Ruby1.8.6およびRails2.3.4からRuby1.9およびRails3.0.3にアップグレードしました。
私は次のコントローラーを持っています:
ただし、「load_progressメソッド」を呼び出すと、次のようになります。
127.0.0のGET"/load_progress。xml"を開始しました。ChartController#load_progressによるHTML 完了としての処理406251msで受け入れられない
また、respond_toブロックをに変更してみました
しかし、私は同じ応答を受け取ります。新しいrespond_with形式に関するすべての新しいRailsドキュメントを読みましたが、XML応答を引き出すことができないようです。誰かがいくつかのアイデアを持っていることを必死に望んでいます。
ruby-on-rails-3 - Rails3の応答形式とAcceptヘッダーのベンダーMIMEタイプを使用したバージョン管理
前文:
APIのバージョン管理方法を調査し、それを行ういくつかの方法を見つけました。私はpeterwilliamsの提案を試してみることにし、バージョンとフォーマットを指定するために新しいベンダーのmimeタイプを作成しました。「レールウェイ」に従ってこれを行うための明確な記述が見つからなかったので、いくつかの場所からの情報をまとめました。私はそれを機能させることができましたが、レンダラーがウィジェット配列とウィジェットインスタンスを処理する方法にいくつかの間抜けがありますrespond_with
。
基本的な手順と問題:
mimeタイプを登録し、xmlとjsonの両方でバージョン1のレンダラーをApplicationControllerに追加し、レンダラーの呼び出しto_myproj_v1_xml
とto_myproj_v1_json
モデルのメソッドを追加しました。 respond_with(@widget)
正常に動作しますが、「テンプレートがありません」というメッセージが表示されますrespond_with(@widgets)
。HTTP/1.1 500 Internal Server Error
回避策:
「テンプレートがありません」は、レンダリングが呼び出されず、一致するテンプレートが存在しないことを意味します。偶然、クラスメソッドを探していることに気づきました...そこで、機能する以下のコードを思いつきましたが、あまり満足していません。間抜けは主にxml = obj.to_myproj_v1_xml(obj)
モデルにあり、モデルの重複に関連しています。
私の質問は-誰かが少しきれいな方法で同様のことをしたことがありますか?
-=更新されたコード=-
config / initializers / mime_types.rb:
app / controllers / application_controller.rb:
app / models / widget.rb:
app / controllers / widgets_controller.rb:
config / initializers /monkey_array.rb
アップデート:
気分は良くなるが、それでも少し奇妙な別の解決策を見つけました(私はまだモンキーパッチに完全に慣れていません)、おそらく大丈夫です...基本的に応答データの構築をクラスメソッドto_myproj_v1_json
から配列のモンキーパッチに移動しました。このように、ウィジェットの配列がある場合、各ウィジェットでインスタンスメソッドを呼び出し、as_myproj_v1_json
配列全体を目的の形式として返します。
注:
- as_jsonはjson形式とは関係がなく、ハッシュを作成するだけです。カスタムフォーマットをas_myproj_v1_json(またはカスタムmimeタイプを使用していない場合はas_jsonオーバーライド)に追加すると、to_jsonはハッシュをjson文字列に変更します。
以下のコードを現在使用されているものに更新したため、元の質問が意味をなさない場合があります。誰かが元の質問とコードをそのまま表示し、応答に修正されたコードが必要な場合は、代わりにそれを行うことができます。
ruby-on-rails - Rails 3:respond_withを使用してリソースを削除する適切な方法
を組み込んでコントローラーを乾かそうとしていrespond_with
ます。私がそうするとき、Railscastのいくつかの指示に従って、私は物事がほとんど機能するようになります。問題は、リソースを削除people_url
した後のリダイレクトにあります...これはリダイレクトする必要があります...代わりに特定のリソースをロードしようとします。
私が見つけたサンプルコードは次のようになります...しかし、削除したばかりのリソースを読み込もうとして失敗します:
その最後の行をに変更してrespond_with(@people)
も機能しません(私はそれが機能することを望んでいましたが...)
多くのことを掘り下げて理解するために最善を尽くした後、私はこれで物事を機能させることができました(少なくともそれはそう見えるでしょう。仕様は合格です。アプリは機能します):
それで、これはこれを処理する正しい方法ですか?reply_withの背後にあるすべての「魔法」を使用すると、削除後に自分自身にリダイレクトできないことがわかりますか?また、これ(7つの基本的なRESTful CRUDメソッドの1つ)はかなり基本的で初歩的なものであるため、多くの例がたくさんあると思いました...しかし、機能しなかったコードを示唆するものを除いて、多くを見つけることができませんでした自分。
誰かがここで起こっているレールの「魔法」を理解するのを手伝ってくれることを願っています。そうすれば、これが道を進んで私に吹き飛ばされても驚かないでしょう。
json - format=json の場合の Respond_with リダイレクト
コントローラーで奇妙な動作が発生しています。json 応答をレンダリングする代わりにリダイレクトしたい場合があるようです。
ほとんどの場合はうまくいくと思いますが、今日、次のエラーが通知されました。
NoMethodError: #<FavoritesController:0x00000006171dc0> の未定義のメソッド `favorite_url'
params ハッシュは次のように記録されました。
ほとんどの場合は機能しているように見えるので、特に奇妙です...他のコントローラーのいくつかを古い format.json { render :json => @object } 構文を使用するように変更しましたが、可能であればそれを避けたいと思います.
これはどうやってできるの?