我正在尝试截断超过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)
有效的准答案:
<%= raw (truncate_html posts.content.html_safe, :length =>500, :omission => "...#{link_to 'Continue Reading', post_path(posts.url_name)}") %>
最终没有使用帮助器,但这有效。
正如我在评论中写道:
在最后一个示例中,您会收到该错误:
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
添加链接的正确方法,而不是像你在答案中那样使用字符串插值