ruby on rails link_to新创建的页面

时间:2011-01-16 02:04:07

标签: ruby-on-rails ruby ruby-on-rails-3 link-to

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

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

项目是belongs_to用户(联系页面中的联系人)的模型。

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

我缺少什么?

我已经搜索了很长时间的解决方案,并且在其他地方找不到这个问题的答案。我知道它有点基本,但我别无选择。

2 个答案:

答案 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 deletematch作为集合或成员块中的参数,只是告诉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