2

我在 rails(3) 中创建了一个名为我的项目模型的新 html 页面,我contact.html.erb有兴​​趣从不同的页面链接到它,我添加了代码:

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

Project 是一个模型,belongs_to它是一个用户(即联系页面中的联系人)。

这个链接给了我一条错误消息,说不contact_project_path存在。我知道我需要在某个地方定义它,但我不知道在哪里或如何。我希望每个项目的页面都是特定的。我在project_controler命名联系人中创建了一个操作并将其留空。

我错过了什么?

我已经搜索了很长一段时间的解决方案,但在其他任何地方都没有找到这个问题的答案。我知道它有点基本,但我没有其他选择。

4

2 回答 2

4

-修订答案-根据评论,我看到您并没有尝试关联联系人模型,而只是一个视图。在这种情况下,您仍然需要更改路由文件,但您需要决定是要为所有项目获取单个联系人页面,还是每个项目获取一个联系人视图。IE:

# 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

无论哪种方式,您都需要在您的路线文件中为您的项目资源使用一个块。因此,如果您希望集合(所有项目)有一个联系页面,请执行以下操作:

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

或者,如果您希望每个成员有一个联系人视图(每个项目一个),请执行以下操作:

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

无论哪种方式,这都会为您提供可以放入的辅助方法link_to

对于集合,它应该是contact_projects_path(无参数),对于成员,它应该是contact_project_path(@project)(作为参数传入项目。

您可以使用get post put deleteormatch作为集合或成员块中的参数,它只是告诉 Rails 在该 URL 处要处理哪种请求,以及要生成哪些帮助程序。对于普通视图,您需要 GET 请求。

我希望这最终能回答你的问题:)

-原始答案-

这是用于路由到模型,而不仅仅是视图

添加到您的 routes.rb 中:

resources :projects do
  resource :contact
end

如果我正确理解您的问题,那应该创建一个名为 project_contact_path() 的帮助程序。

该记录将projects/123/contact.

如果您希望每个项目有多个联系人,则需要将其设为复数(资源:联系人)。然后您的记录将如下所示projects/123/contacts/123

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

link_to( project_contact_path(@project) )如果每个项目只有一个联系人,或者每个项目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 回答