Rails通过'read more'切换截断

lfl*_*res 12 javascript jquery truncate ruby-on-rails ruby-on-rails-3

我有一个段落,我想要截断,可以点击"阅读更多",并将其与其余内容一起滑开.内容来自数据库字段.这是我对截断的看法:

<%= truncate(@major.glance, :length => 250, :omission => '... Read More')%>
Run Code Online (Sandbox Code Playgroud)

我似乎无法通过从数据库中提取数据来找到这种方法.我看到很多使用全文的示例,以及要隐藏在单独div标签中的文本.但是,由于此内容来自数据库并且是动态的,因此无法找到有关如何执行此操作的任何信息.

jvn*_*ill 25

您可以尝试以下方法

<div>
  <% if @major.glance.length > 250 %>
    <%= link_to_function truncate(@major.glance, length: 250), "$(this).parent().html('#{escape_javascript @major.glance}')" %>
  <% else %>
    <%= @major.glance %>
  <% end %>
</div>
Run Code Online (Sandbox Code Playgroud)

或者如果您更喜欢使用Read more链接

<div>
  <% if @major.glance.length > 250 %>
    <%= truncate(@major.glance, length: 250) %>
    <%= link_to_function '...Read more', "$(this).parent().html('#{escape_javascript @major.glance}')" %>
  <% else %>
    <%= @major.glance %>
  <% end %>
<div>
Run Code Online (Sandbox Code Playgroud)

UPDATE

由于在Rails 4中,link_to_function不推荐使用并且建议使用非阻碍js,请使用以下命令

<div>
  <% if @major.glance.length > 250 %>
    <%= truncate(@major.glance, length: 250) %>
    <%= link_to '...Read more', '', class: "read-more-#{@major.id}" %>
    <script>
      $('.read-more-<%= @major.id %>').on('click', function(e) {
        e.preventDefault()
        $(this).parent().html('<%= escape_javascript @major.glance %>')
      })
    </script>
  <% else %>
    <%= @major.glance %>
  <% end %>
<div>
Run Code Online (Sandbox Code Playgroud)


Geo*_*öck 5

我知道我加入这个对话有点晚了.我一直在解决同样的问题,尝试上面的解决方案,这很好.然而,隐藏的SEO明智内容没有被搜索引擎索引.我也检查了Lynx,并且无法跟踪链接(显然).因此,Jed Foster为此解决方案做好了准备 readmore.js - lynx可以正确读取它,现在我正在等待SE索引更新,看看我是否能在搜索结果中找到自己.以防有人处于类似情况......