无需获取记录即可实现Link_to效率

时间:2014-02-05 16:45:02

标签: ruby-on-rails performance link-to shorthand

在我的Rails应用程序中有experiment个实例,每个实验都有attachments,它们在数据库中表示为二进制blob,可能非常大。这个问题是关于编码link_to显示附件的效率。

最初我有这个:

<%= link_to @experiment.attachment.file_name, @experiment.attachment %>

但是我被告知Rails应用程序在使用

呈现页面时效率更高
<%= link_to @experiment.attachment.file_name, {:controller => :attachments, :action => :show, :id => @experiment.attachment_id}, {:method => :get} if ! @experiment.attachment_id.nil? %>

理由是第一个版本从数据库中获取附件,第二个版本不从中获取附件,使其更好,尽管更长且更丑。这是真的?

两个版本在将用户引导到附件的显示页面时完成了同样的事情,我的印象是第一个是做link_to记录显示页面的默认方式。

有没有办法简化第二段代码,使视图中的代码不那么糟糕?

2 个答案:

答案 0 :(得分:0)

尝试使用rails路由助手,使用rake routes查看所有路由然后你可以得到这样的东西(不要忘记apped _path路由):

experiment_attachment_path(@experiment.attachment)

答案 1 :(得分:0)

我会使用路径路径来表达这一点,而不是使用ActiveRecord实例加载,因此视图可以使用其to_param方法(这是它在幕后所做的)。

<%= link_to @experiment.attachment.file_name, attachment_path(@experiment.attachment_id) %>