如何在rails中渲染这个部分
Posted
技术标签:
【中文标题】如何在rails中渲染这个部分【英文标题】:how to render this partial in rails 【发布时间】:2013-12-18 20:05:56 【问题描述】:我正在尝试呈现关联的这一部分belongs_to 和has_many
,即
我的模型就是这样
活动模型
class Activity < ActiveRecord::Base
has_many :talks
end
谈话模型
class Talk < ActiveRecord::Base
belongs :activity
end
在我的谈话控制器中我有
@activities = Activity.where(user_id: [current_user.friend_ids, current_user])
@talks = Talk.find(:all, :order => "created_at DESC")
我认为我有
<% activity.talks.each do |c| %>
<div class="media">
<a class="pull-left" href="#">
<%= image_tag(c.user.image.url(:tiny),:style=> "width: 100%;")%>
</a>
<div class="media-body">
<strong><%= c.user.username %></strong> <%= c.details %><br>
<small><span class="muted"><%="#time_ago_in_words(c.created_at) ago "%></span></small>
</div>
</div>
<% end %>
这将显示每个活动的所有谈话
我如何创建<% activity.talks.each do |c| %>
的一部分
【问题讨论】:
【参考方案1】:创建一个局部
app/views/talks/_talk.html.erb
然后打电话
<%= render activity.talks %>
这将为activity.talks
集合中的每个谈话呈现一个_talk.html.erb
部分,它可以访问talk
变量。
此外,您可以通过阻止N + 1 queries 来优化代码。在您的控制器中,
@activities = Activity.includes(:talks).where(user_id: [current_user.friend_ids, current_user])
注意includes(:talks)
。在上面链接的文档中阅读有关预加载的更多信息。
【讨论】:
非常感谢你拯救了我的一天,包括你额外的 include(:talks) 提示还有一件事是如果我在我的 _create.js.erb 中这样做,$("#chat").append (""); $("#new_talk")[0].reset();我将如何呈现您为我提供的部分...谢谢 如果您在create
操作(即@talks = Talk.find(...)
)中获取谈话内容,那么您可以执行$(<selector>).append("<%= j render(@talks) %>");
之类的操作以上是关于如何在rails中渲染这个部分的主要内容,如果未能解决你的问题,请参考以下文章
Rails 4 使用 ajax、jquery、:remote => true 和 respond_to 渲染部分