【问题标题】:how to render this partial in rails如何在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 %>

这将显示每个活动的所有谈话

我如何创建&lt;% activity.talks.each do |c| %&gt;的一部分

【问题讨论】:

    标签: ruby-on-rails partial-views


    【解决方案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(...))中获取谈话内容,那么您可以执行$(&lt;selector&gt;).append("&lt;%= j render(@talks) %&gt;"); 之类的操作
    猜你喜欢
    • 2014-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-27
    • 1970-01-01
    • 2011-12-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多