我在rails(3)中创建了一个名为contact.html.erb
的项目模型中的新html页面,我有兴趣从不同的页面链接到它,我添加了代码:
<%= link_to 'contact', contact_project_path(@project) %>
项目是belongs_to
用户(联系页面中的联系人)的模型。
此链接向我显示一条错误消息,指出contact_project_path
不存在。我知道我需要在某处定义它,但我不知道在哪里或如何。我希望页面是每个项目特定的。我在project_controler
命名的联系人中创建了一个操作,并将其留空。
我缺少什么?
我已经搜索了很长时间的解决方案,并且在其他地方找不到这个问题的答案。我知道它有点基本,但我别无选择。
答案 0 :(得分:4)
-REVISED ANSWER- 根据评论,我发现你并没有尝试将联系人模型与视图联系起来。在这种情况下,您仍然需要更改路径文件,但您需要确定是要为所有项目获取单个联系页面,还是每个项目获得一个联系人视图。 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
delete
或match
作为集合或成员块中的参数,只是告诉Rails什么样的请求处理该URL,以及生成什么帮助器。对于普通视图,您需要GET请求。
我希望这最终能回答你的问题:)
-ORIGINAL ANSWER -
这是用于路由到MODEL,而不仅仅是视图
添加到您的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) )
。
答案 1 :(得分:0)
看看这里:
http://edgeguides.rubyonrails.org/routing.html
你应该知道contact_project_path(@project)
不是一个宁静的路线(除非contact_project是一个模型,但几乎没有机会)。您必须声明此名称,使用:as