2

rails(3)で、という名前のプロジェクトモデルに新しいhtmlページを作成しましcontact.html.erbた。別のページからリンクすることに興味があり、コードを追加しました。

<%= link_to 'contact', contact_project_path(@project) %>

プロジェクトは、belongs_toユーザー(連絡先ページの連絡先)のモデルです。

このリンクは、存在しないというエラーメッセージを表示contact_project_pathします。どこかで定義する必要があることはわかっていますが、どこでどのように定義するかはわかりません。プロジェクトごとにページを具体的にしたいと思います。名前付き連絡先にアクションを作成し、project_controler空のままにしました。

私は何が欠けていますか?

私はかなり長い間解決策を探してきましたが、この質問に対する答えは他のどこにも見つかりませんでした。私はそれが少し基本的であることを知っていますが、他の選択肢はありません。

4

2 に答える 2

4

-改訂された回答- コメントに基づいて、連絡先モデルを関連付けようとしているのではなく、単なるビューであることがわかります。その場合でもルート ファイルを変更する必要がありますが、すべてのプロジェクトに対して 1 つの連絡先ページを取得するか、プロジェクトごとに 1 つの連絡先ビューを取得するかを決定する必要があります。いいえ:

# Collection Contact
example.com/projects/contact # IE One contact view for all projects

# Member Contact
example.com/projects/1/contact # IE One contact view per project

どちらの方法でも、ルート ファイルでプロジェクト リソースのブロックを使用する必要があります。したがって、コレクション (すべてのプロジェクト) に対して 1 つの連絡先ページが必要な場合は、次のようにします。

resources :projects do
  collection do
    get 'contact'
  end
end

または、メンバーごとに 1 つの連絡先ビュー (プロジェクトごとに 1 つ) が必要な場合は、次のようにします。

resources :projects do
  member do
    get 'contact'
  end
end

いずれにせよ、これはあなたが入れることができるヘルパーメソッドをあなたに与えるでしょうlink_to

コレクションの場合はcontact_projects_path(引数なし)、メンバーの場合はcontact_project_path(@project)(引数としてプロジェクトを渡します。

get post put deleteorをコレクションまたはメンバー ブロックのパラメーターとして使用できますmatch。これは、その URL で処理する要求の種類と生成するヘルパーを Rails に指示するだけです。通常のビューでは、GET リクエストが必要です。

これが最終的にあなたの質問に答えることを願っています:)

-元の答え-

これは、ビューだけでなく、モデルへのルーティング用です

routes.rb に以下を追加してください:

resources :projects do
  resource :contact
end

あなたの質問を正しく理解できれば、project_contact_path() というヘルパーが作成されるはずです。

この記録はprojects/123/contact.

プロジェクトごとに複数の連絡先が必要な場合は、複数形にする必要があります (resource :contacts)。次に、レコードは次のようになりますprojects/123/contacts/123

http://guides.rubyonrails.org/routing.htmlを参照

link_to( project_contact_path(@project) )プロジェクトごとに連絡先が 1 つしかないlink_to( project_contact_path(@project,@contact) )場合、またはプロジェクトごとに複数の連絡先がある場合は、これを使用してリンクします。

于 2011-01-16T02:11:34.670 に答える
0

ここを見てください:

http://edgeguides.rubyonrails.org/routing.html

これは安らかなルートではないことに注意してcontact_project_path(@project)ください(contact_projectがモデルであるが、チャンスがほとんどない場合を除く)。この名前を宣言する必要があります、使用:as

于 2011-01-16T02:07:19.107 に答える