2012-01-12 3 views
2

私は、本質的に宝石名前空間のActiveRecord :: Baseクラスの束である宝石を持っています。それらのすべてについて、私は同じ種類の問題を抱えています。私はRails:ActiveRecord :: Baseオブジェクトで呼び出されるデフォルトのメソッドをlink_toで変更する

<% @users.each do |user| %> 
    <td><%= link_to 'Show', user %></td> 
<% end %> 

...めちゃくちゃます何

resources :users 

がLINK_TOである...

module MyGem 
    class User < ActiveRecord::Base 
    ... 
    end 
end 

はその後、私のアプリで、私はルートを持っている...モデルを持っています私は...

undefined method `my_gem_user_path' for #<#<Class:0x0000000305f728>:0x00000003055408> 

私はr outes.rbが、私はソリューションがデフォルトでmy_gem_user_path(user)の代わりにuser_path(user)を呼び出すようにモデル/ link_toを設定することができると考えています。私はちょうど、もし可能ならば、これをどうやってどうやって行うのか分かりません。

誰もがベストプラクティスを知っていますか?

答えて

0

ここでのベストプラクティスは、ルートのネームスペースです。あなたのクラスはMyGem :: Userという名前空間になっています。 #link_to#polymorphic_pathを使用してクラスにクラス名を照会し、そのクラス名の#underscorizeを呼び出してパスを取得するため、パスはuser_pathではなくmy_gem_user_pathとみなされます。

namespace(:my_gem) do 
    resources :users 
end 

その後、my_gem_user_pathはMyGem ::がUserControllerに解決されます:それは、リソースコールがそうのように包まれるべきであることを意味します。あなたのコントローラにも同様に名前空間が設定されていることを確認してください。そのコントローラにルートを解決させたくない場合は、コントローラ名を#resourcesのオプションとして指定できます。

編集:それは面白いです、私はそれがその問題に遭遇するとは思わなかった。これを修正するための設定がまだ残っている可能性があるので、まだ解決していないとマークします。 polymorphic_path(上記のようなリソース指向パスを使用すると呼び出されるもの)は、名前付きルートでいつでも置き換えることができます。たとえば、 link_to "User"の代わりに、ユーザー link_to "User"、my_gem_user_path routes.rbファイル(#resourcesメソッドを使用)でRESTfulルートを使用すると、名前付きルート。 form_forの場合

、構文が若干異なります。

form_for(@user, @task) 

は、新しいフォームのため

form_for([@user, @task], :url => my_gem_user_my_gem_tasks_path(@user, @task), :method => :post) 

になります。編集フォームの場合、

form_for(@task, :url => my_gem_user_my_gem_tasks_path(@user, @task), :method => :put) 

意味がありますか?ここにform_forのドキュメントへのリンクがありますhttp://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html#method-i-form_for

+0

私はあなたの助言に従いました。これはほとんどの場合、うまくいきます。この例では、MyGem :: Taskというモデルへのルートのタスクという名前の埋め込みリソースを追加しました。 rake routesはPUTルートがmy_gem_user_taskであると言っていますが、form_for([@ user、@ task])が評価されるときには '未定義メソッドmy_gem_user_my_gem_task_path'と表示されます。 my_gem_user_task_path(これは自動的に定義される)に評価するためにこれを修正する方法はありますか?私はレール3を使用しています。 – Ben

関連する問題