2011-11-11 6 views
1

カスタムURLを設定できないようです。すべてのRESTfulルートはうまく動作しますが、私はモデル(単純な4文字のランダムな文字列)で作成し、並べ替えの "パーマリンク"として機能する既存のルートに/:unique_urlを追加するだけではわかりません。Ruby on Rails 3.1でカスタムルートを作成する際に問題が発生する

routes.rbを

resources :treks 
match ':unique_url' => 'treks#mobile' 

コントローラ

. 
. 
def mobile 
    @trek = trek.find(params[:id]) 
end 

私は既存のリソース上のカスタムアクションを定義しようとしているので、これはありますか?リソースを持つコントローラと同じコントローラ上にカスタムメソッドを作成することはできませんか?私はそれが正常に動作しますroutes.rbmatch 'treks/:id/:unique_url' => treks#mobileに変更するが、私はちょうどURLは単にそれがfind_by_[parameter]ように思える/:unique_url

更新になりたいところで

は、移動するための方法です...

私はコンソールでプレーしてきたと私はどんな方法が前方に来てもらうように見えることはできません...私は例えばTrek.last.fullnameを実行することができますが、@trek = Trek.lastを実行することはできません...そして呼び出す...例えば、。すべての手掛かりはなぜですか?私はこれが私の問題だと思う。

+1

あなた 'mobile'方法は' paramsは使用しています:「'しかし、あなたはドン[ID]をあなたのルートに ':id'があります。モデルに 'find_by_unique_url'メソッドを作成し(まだ持っていない場合)、' mobile'メソッドでそれを使う必要があります。 –

+0

ありがとう、どこでこのメソッドを作成しますか? – pruett

+0

'unique_url'フィールドを持っていれば、既にそれを持っています。レールコンソールでは 'Trek.find_by_unique_url(url)'を実行できます。ここで 'url'は一致するunique_urlであり、結果が表示されます。 –

答えて

0
trek.find_by_unique_url(params[:unique_url]) # should do the trick 

を@pruettなし、find_by_XXXの方法は、オンザフライで、Rubyのmethod_missing呼び出しによって生成されます!したがって、XXXの代わりに、モデルで定義した任意の属性を使用できます。

あなたも限りのような複数の属性、リストのように行くことができます:

find_by_name_and_unique_url(the_name, the_unigue_url) 

をこれらのページをチェックしてください:

http://guides.rubyonrails.org/active_record_querying.html

http://m.onkey.org/active-record-query-interface


あなたが取得する場合undefined method ... for nil:NilClass、つまり、thそのメソッドを呼び出しようとしているオブジェクトが存在しません。ありません。

あなたはおそらく、オブジェクトがnil以外

+0

私はそれが何だったのかわかりません...私は全身に打ち間違いをしていましたか?とにかく...今働いているようだ。私は私の属性 'unique_url'がリフレッシュごとに絶えず変化していたと思うので、私はあなたの助けを借りて、動くターゲットを追いかけていました。 – pruett

1

Trekには独自のURLを格納するフィールドがありますか?もしそうなら、あなたはこのような何かやるべきこと:

@trek = Trek.find_by_url(params[:unique_url]) 
+0

私はコールバック 'before_save'関数で作成するフィールド':unique_url'を持っています。 – pruett

+0

その場合、 'trek.find_by_unique_url(params [:unique_url])' –

+0

は 'find_by_unique_url'メソッドを定義しますか? – pruett

-1

うーんであることを確認するために、その行の前にif文置くことを逃しました。私は通常次のようなことをします:

map.connect "/:unique_url", :controller => "treks", :action => "mobile" 

そのコントローラでは、IDは適用されません。あなたはこのようなものに変更する必要があるだろう:

def mobile 
    @trek = trek.find_by_unique_url(params[:unique_url]) 
end 

(unique_urlは、下の検索対象の列であればそれはだ)

+0

これはRails 3.1の構文ではありません。 –

+0

えええええええええええええええええええええええええええええええええええええ – pruett

+0

ああ私のアプリのほとんどはまだ2.3で立ち往生している..まだ新しいものをすべて取得していない。 – wejrowski

関連する問題