通过link_to函数链接到rails中的方法

时间:2011-08-15 16:31:21

标签: ruby-on-rails methods routes haml link-to

我最近在我的项目控制器(projects_controller.rb)中添加了一个新方法(称为“help”),并在views目录中创建了一个“help.html.haml”。

我在routes.rb中添加了以下路由:

 resources :users, :only => [:new, :create, :edit, :update, :help]
 resources :projects, :module => 'users' do
   get  :help, :on => :member, :as => :help
 end

我的目标是在单独的视图上创建一个链接(让我们称之为index.html.haml),链接到help.html.haml。 注意:目前,我的路线设置为显示以下网址的帮助:http://localhost:3001/projects/id/help

不幸的是,我不知道如何编写代码来链接到上面列出的帮助URL。截至目前,我在index.html.haml中有以下代码:

 %li= link_to 'quick help', project_path(@project)

但是此代码只需要http://localhost:3001/projects/id。是否可以使用link_to函数将“/ help”添加到URL,还是有更好的方法来执行此操作?

我真诚地感谢任何帮助。非常感谢你的时间!

2 个答案:

答案 0 :(得分:1)

让我们来看看你定义的路线的组成部分:

get :help, :on => :member, :as => :help
  • 第一个参数是:help,这是将要调用的操作的名称。
  • 第二部分是:on => :member,这意味着该操作的范围限定在特定记录上。所以,你将不得不传递一个id来调用它。
  • 第三部分:as => :help定义了可用于生成网址的辅助方法的名称。这就是你要找的东西。

基本上,help_project_path(@project)会生成您需要的网址。所以,链接看起来像这样:

%li= link_to 'quick help', help_project_path(@project)

请注意,您并不真正需要:as => :help路径,默认情况下应为help。如果你想要一个不同的帮助名称,通常会使用它。

我想指出的另一件事是,您没有创建“指向help.html.haml的链接”,而是在{{1}上创建指向help操作的链接控制器。如果必要,操作可以在某处重定向,您不必渲染视图。我只是这样说,因为听起来你还有点新鲜,对不起,如果我只是误解了。

答案 1 :(得分:0)

帮助方法有何功能?它是每个项目的帮助方法,还是一般项目的帮助。您可以按如下方式创建路线:

match '/projects/help/:id' => 'projects#help', :via => :get

for:via,根据您的要求选择一个REST方法,即GET,POST,PUT等。

如果您尝试为项目创建一般的帮助页面,这可能没用。每当您将网址设为 / projects /<> 时,Rails会尝试将其路由到项目展示页面,并尝试使用<> 作为ID该项目。

您正在使用的link_to, project_path(@project)将带您进入 @project 对象的项目展示页面

所以,最后,这是你应该做的。我建议你创建一个单独的控制器,用于一般页面。比如说,你有一个控制器 OtherController

match '/help', :controller => 'other', :action => 'help', :via => :get

然后为视图创建一个help.html.erb页面。希望这对你有用。