2011-01-07 7 views
1

私は別のレールアプリと話すために私のレールアプリでActiveResourceを使用しています(どちらもバージョン2.3.5です)。私は特定のリソースオブジェクトのページにリンクしたいと思いますが、それを行うには良い方法はないようです。私は考え出した醜い方法は次のように、私のリソースを模倣する私のroutes.rbをファイルに行を追加することです:ActiveResourceでurl_forを使用する良い方法はありますか?

# environment.rb, or in the config/environments/*.rb files 
PERSON_URL = "people.example.com" 

# person.rb 
class Person < ActiveResource::Base 
    self.site = "http://#{PERSON_URL}" 
end 

# routes.rb 
map.resources :people # or persons, or whatever 

# my_view.html.erb 
<%= link_to person.name, person_url(person, :host => PERSON_URL) %> 

しかし、これは非常に醜いです。今では実際には存在しないアプリ内で余分なルートが浮かび上がっています。より良い方法が必要です。モデル自体にURLを取得するための手掛かりがありますか?誰にもヒントはありますか?ありがとう。

+0

私はアプリケーションヘルパーを作成して、より洗練されたコードを作成したいと思います。 – apneadiving

答えて

0

ActiveResourceは、この方法で使用するためのものではありませんでした。これはActiveRecordに非常に近く実装されています。経路はローカル定義です。別のサイトを参照している場合は、このアプリケーションにリンクしていないので、通常のルートはあなたを(多く)助けません。

デフォルトのヘルパーは、命名規則だけで動作します。ヘルパーがオブジェクトで行う唯一のことは、個々のリソースの識別子を取得するためにto_paramと呼ぶことです。

あなたを助けることができる宝石があるかどうかわかりませんが、あなた自身のヘルパーを作る必要があることを恐れています。

+0

url_forに関するこの1ビットのドキュメントではない場合、ActiveResourceの使用目的に同意する傾向があります。 : "ハッシュの代わりに、オプションのパラメータとしてレコード(Active RecordやActive Resourceのような)を渡すと、そのレコードの名前付きルートがトリガーされます。 Workshopオブジェクトはworkshop_pathルートを使用しようとします... "もし彼らが明示的にActiveResourceオブジェクトを許可していれば、それを有効にするためにそれらを実行すると思いますか? – carpeliam

+0

ActiveResourceは、ActiveRecordと同じように(また、ActiveModel :: Namingを拡張するすべてのクラスがRails 3から)ドキュメントに書かれているように、名前に基づいてリンクを生成しているため、「参照はクラス名で行われます。あなたはいつも元の表現ではなく、あなた自身の表現を参照しています。 ActiveRecordでは、モデルの背後にあるデータベースではなく、モデルを参照しています。 ActiveResourceでも同じです。さらに、ActiveResourceクラスのソースにHTML表現が含まれているかどうかは不明ですが、XMLまたはJSONのみである可能性もあります。 – iain

+0

私はそれを考えて、それを回避する方法があるかもしれません。それは 'default_url_options'です。これは、application_controllerで定義できるメソッドです。私はそれがうまくいくかどうか分からないが、それを調べる価値があるかもしれない。 – iain

関連する問題