使用帮助程序的截断html的Rails link_to以未定义的方法结束

问题描述 投票:1回答:2

我正在尝试截断超过250的帖子,以包含指向展示页面的链接。在我的控制器中我有:

现在我在索引视图中:

<% @posts.includes(:categories, :author).each do |posts| %>
<%= truncate_html posts.content.html_safe, :length => 250, omission:'...Continue Reading' %>
<%= link_to "...Continue Reading", post_path(posts.url_name)%>

它正确加载,没有错误。现在省略部分没有点击到新页面,所以我添加了link_to。然后我尝试了类似的东西:

<%= truncate_html posts.content.html_safe, :length => 250, link_to: "...Continue Reading", post_path(posts.url_name) %>

结束以下错误:

syntax error, unexpected ')', expecting => ", post_path(posts.url_name) );@output_buffer.safe_append=' ^ 

所以我决定尝试在帮助器中构建它,然后插入帮助器。对于我的助手我构建了:

def post_length
 output = truncate(@posts.content, length: 250)
 output += link_to('...Continue Reading', post_path(posts.url_name)) if post.content.size > 250
 output.html_safe
end

然后在我的索引中输入以下内容:

<%= post_length %>

我最终得到了未定义的方法'内容'。我已经尝试过帮助:posts.content,post.content,@ post.content等。不起作用。我帮帮忙了吗?

我也尝试过以下方法:

def post_truncate(&block)
truncate(@posts.content,
  length: 250,
  separator: ' ',
  omission: "...") {
    link_to "Something", post_path(posts.url_name)
  }
  )
end

我最终遇到语法错误,意外')',期待keyword_end(SyntaxError)

ruby-on-rails
2个回答
0
投票

有效的准答案:

<%= raw (truncate_html posts.content.html_safe, :length =>500, :omission => "...#{link_to 'Continue Reading', post_path(posts.url_name)}") %>

最终没有使用帮助器,但这有效。


0
投票

正如我在评论中写道:

在最后一个示例中,您会收到该错误:

syntax error, unexpected ')', expecting keyword_end (SyntaxError)

因为你在结束前确实有一条意想不到的)。关闭)就在ommision: "..."之后,所以你不需要另一个。

您的帮助方法应如下所示:

def post_truncate(&block)
  truncate(@posts.content,
    length: 250,
    separator: ' ',
    omission: "...") {
      link_to "Something", post_path(posts.url_name)
    }
end

我认为这是使用link_to添加链接的正确方法,而不是像你在答案中那样使用字符串插值

© www.soinside.com 2019 - 2024. All rights reserved.