2016-01-08 46 views
1

我正在尝试在我的导航栏中使用link_to方法,但我明显缺乏了解其实际工作原理的基础知识。Ruby on Rails link_to方法

<% link_to "Viral", @viral %> 

我的印象是“病毒”是链接的标签,但我不知道什么是病毒。该路线是否与控制器/视图链接(即病毒控制器&视图),如果是,那么路线将是什么样子?我正在试图为不同的文章创建分类页面,并认为这将是最明显的导航方式。

+1

它可能会清除你的疑虑:http://api.rubyonrails.org/classes/ActionView/Helpers/UrlHelper.html#method-i-link_to – RAJ

+0

我已经通过的文件看(这是我得到了一段代码fr嗡,首先)但我正在寻找一个更容易理解的解释。来自一个地方从小到没有红宝石或钢轨的经验,API往往最终相当混乱。 –

回答

0

@viral是简单的路径。

如果您已经定义像这样的路线:

get "viral", as: "something#viral" => "viral" 

,那么你应该把<%= link_to "some text", viral_path %>和链接会自动定向到www.domain.com/viral。

如果你有一个特定的网址,你应该在引号后面写域名。所以,如果您的域名是www.domain.com,你想重定向到www.domain.com/viral,你会写

<%= link_to "some text", "viral" %> 
0

@viral是一个变量(对象)

link_to是一个辅助方法什么使HTML链接

<%= link_to "Viral", @viral %> 

将建立链接显示的动作,但如果您需要设置其他路径只需使用:

<% link_to "Viral", viral_path %> 

您可以在终端

rake routes 
1

看到Rails惯例的所有路径,link_to模型实例转换成链接到记者和RESTful表演动作的URL。

所以,在你的榜样

<%= link_to "Viral", @viral %> 

相当于

<%= link_to "Viral", viral_path(@viral) %> 

您将获得在Docs更多信息。

0

link_to需要有以下传递给它:

<%= link_to "Link Text", "http://link-path.com" %> 

第一个参数是锚文本,第二是浏览器将请求的URL。


由于Rails是一个应用框架,你可以通过动态值到link_to参数。就像是...

#app/helpers/application_helper.rb 
def your_link_helper 
    "http://google.com" 
end 

<%= link_to "Link Text", your_link_method %> 

如果你明白这一点,你就会明白,Rails sets a series of "helper" methods for your "routes",这意味着,而不是(以上)your_link_method,你就可以使用...

#config/routes.rb 
resources :virals 

<%= link_to "Viral", viral_path("12") %> 

-

所以...

@viral是一个instance variable - 在类的实例(在这种情况下,您的控制器)设置的变量:

#app/controllers/virals_controller.rb 
class ViralsController < ApplicationController 
    def show 
     @viral = Viral.find params[:id] 
    end 
end 

由于Ruby是object orientated,它期望每个@instance_variable是由红宝石分配一个对象

这意味着,如果你通过一个有效的Ruby对象到link_to方法,Rails会提取所有必要的数据调用显示它行动......

<%= link_to @viral.id, @viral %> 

...居然会是...

<%= link_to @viral.id, viral_path(@viral.id) %>