截断文本并链接到阅读更多

时间:2013-04-07 15:13:46

标签: ruby-on-rails ruby-on-rails-3 routes link-to

链接到我的应用中的帖子时遇到一个小绊脚石。我正在截断帖子的文本并提供“阅读更多”链接。有2个区域可以查看帖子,一个用于所有人(公共),还有一个用于管理员用户编辑/删除帖子。

所以在我的公众视野中我正在做这个

<% @toppost.each do |t| %>
    <div class="post-item">
      <h2><%= t.title %></h2>
       <ul id="newsHome">
        <li><%= date_output(t.published_on) %></li>
        <li><%= t.department.name %></li>
        <li>by Admin</li>
       </ul>
       <% if t.comments.length > 350 %>
        <p class="post-description"><%= truncate(t.comments, length: 350).html_safe %>
        <%= link_to '...Read more', t %></p>
        <% else %>
        <p class="post-description"><%= t.comments.html_safe %></p>

       <% end %>
    </div>
   <% end %>

然而,当点击阅读更多时,它会将我带到网址

/posts/:id

实际上是管理员用户查看帖子的地方,所以目前用户将被重定向回到主页,因为帖子控制器已经

before_filter :authenticate_user!

公开查看所有帖子的位置在特定新闻页面上,例如

localhost:3000/tynewyddnews
localhost:3000/woodside
localhost:3000/sandpiper
localhost:3000/outreach

我的问题是如何在网站公共部分的位置链接到该帖子。

使用top_posts方法的索引操作(参见下面的方法)

def index 
@title = 'Home'
@toppost = Post.top_posts

top_posts方法

def self.top_posts
#Array with each of the 4 departments - first record
top_posts = [
  self.tynewydd_posts.first,
  self.woodside_posts.first,
  self.sandpiper_posts.first,
  self.outreach_posts.first
]
#remove entry if nil
top_posts.delete_if {|x| x==nil}
return top_posts

控制器

def tynewyddnews
  @title = 'Ty Newydd News'
  tynewyddpost = Post.tynewydd_posts.reverse
  tynewyddpost.pop
  @tynewyddpost = tynewyddpost
  @tynewyddpostlatest = Post.tynewydd_posts.first
end

模型

scope :tynewydd_posts, :include => :department, :conditions => {"departments.name" => "Ty Newydd"}, :order => "posts.published_on DESC"

其他部门还有另外3个范围,所有这些范围都在寻找条件部门名称

希望我添加了足够的信息,其他任何需要的东西请询问

修改

一直在思考这个问题并且不确定我是否在正确的轨道上,但对于每个帖子,我需要它链接到公共页面控制器中的相应新闻页面。

tynewyddnews
sandpipernews
outreachnews
Woodsidenews

所以在我的link_to中我需要根据帖子的类型将路由传递给相应的动作..那么如何给每个帖子一个类型然后链接到那个?

由于

1 个答案:

答案 0 :(得分:1)

哇,好的,我从哪里开始。

您需要一条指向该控制器操作的路线,例如

`get '/tynewyddnews' => 'news#tynewyddnews', :as => 'public_news' # gives you the route public_news_path
在您的视图中

= link_to 'Read More', public_news_path

所以,你应该这样做。顺便说一句,你也可以使用.truncate()方法。您将长度作为参数传递,并为您添加...