我的Rails应用程序有Post
和Member
模型。在posts/:id/show
包含一个“喜欢”按钮,会员可以点击,或“不同”如果@member
已经“喜欢”这个@post
已经。如何分段缓存“喜欢”的按钮? (Rails 3.2,memcached)
(此按钮将链接到一个职位的行动,做一些Ajax和使“喜欢”按钮改变成“不像”按钮)
请告诉我来缓存按钮的最佳实践? (下面的代码显然不会缓存按钮的HTML)。
我应该将:touch => true
添加到member.rb
,然后为该按钮创建一个缓存键。 <% cache ['V1', @post, @member, 'like_button']
? (似乎是多余的?)
post.rb
has_many :likes
like.rb
belongs_to :member
belongs_to :post
member.rb
has_many :likes
* 个帖子/ show.html.erb *
<% cache ['V1', @post, 'show'] do %>
<h1>@post.title</h1>
<div class="content">@post.content</div>
<% end %>
<%= render 'like_button', :post=> @post, :member => @member %>
**职位/ _like_button.html.erb **
<% if member.liked_post?(post) %>
<%= link_to unlike_post_path(post), :method => :post, :remote => true, :class => 'btn' %>
<% else %>
<%= link_to like_post_path(post), :method => :post, :remote => true, :class => 'btn' %>
<% end %>
你好Tom感谢您的评论。我对“最佳实践”感兴趣 - 看起来像是一个好主意,将like_button部分与页面的其余部分分开缓存?如果邮件还没有被会员喜欢,我还能如何缓存按钮? (或成本足够小?) –
在你的例子中,'like'按钮将是':post'方法 - 这是因为它更容易缓存,而不是使用':get' ...? –
我的示例中的“like”按钮与代码中的完全相同 - 文件的唯一区别在于文件的第一行。 在我的示例中,每个帖子都有2个缓存版本的代码,一个用于喜欢帖子的人,另一个用于不喜欢的人。 最佳实践是尽可能缓存,而不会让系统太难维护。这就是为什么我移动@ member.liked?调用外部的部分,以明确这个值 - 真或假 - 是唯一使这个部分行为不同的东西。 –