我目前正在学习Rails,并且我遵循了#34;入门Rails"教程http://guides.rubyonrails.org/getting_started.html。我的问题是如何验证文章的长度,如果它超过一定长度,最后会加上三个点?
我有一个页面,显示所有没有评论的文章,我有一个页面,显示每个具有评论的特定文章。如果有人想看到文章的其余部分和评论,他们会点击链接查看该特定文章。
我的index.html.erb显示了每篇文章,但我只想让它显示每篇文章最多200个单词并附加三个点
<% @articles.each do |article| %>
<h1><%= article.title %></h1>
<p><%= article.text %></p>
<%= link_to 'Show full post', article_path(article) %>
<% end %>
show.html.erb显示包含评论的完整文章
<h1>
<%= @articles.title %>
</h1>
<p>
<%= @articles.text %>
</p>
<h2>Comments</h2>
<%= render @articles.comments %>
<h2>Add a comment:</h2>
<%= render 'comments/form' %>
这是文章控制器
class ArticlesController < ApplicationController
def index
@articles = Article.all
end
def show
@articles = Article.find(params[:id])
end
def new
@articles = Article.new
end
def edit
@articles = Article.find(params[:id])
end
def create
@articles = Article.new(articles_params)
if @articles.save
redirect_to @articles
else
render 'new'
end
end
def update
@articles = Article.find(params[:id])
if @articles.update(articles_params)
redirect_to @articles
else
render 'edit'
end
end
def destroy
@articles = Article.find(params[:id])
@articles.destroy
redirect_to articles_path
end
private
def articles_params
params.require(:articles).permit(:title, :text)
end
end
<h2>Comments</h2>
<%= render @articles.comments %>
<h2>Add a comment:</h2>
<%= render 'comments/form' %>
答案 0 :(得分:1)
您可以向模型添加验证:
class Article < ActiveRecord::Base
validates :text, length: { maximum: 1000 }
end
有关详细信息,请查看this guide
答案 1 :(得分:1)
如果您想将文字缩短为一定数量的字符,可以使用truncate:
truncate("Once upon a time in a world far far away", length: 17)
# => "Once upon a ti..."
如果你真的想将文字缩短为一定数量的单词,你可以用空格分割你的字符串,计算你想要的单词数,然后按空格加入这些单词:
string = "Once upon a time in a world far far away"
string.split(" ").join(0, 5).join(" ")
# => "Once upon a time in"
正如您所看到的,您仍然需要在此之后添加...
,但只有当您的限制(在我的示例5
中)小于总字数(或当结果字符串与原始字符串不匹配时。当我使用15
时(我的字符串中只有10个字),您不需要这样做:
string = "Once upon a time in a world far far away"
string.split(" ").join(0, 15).join(" ")
# => "Once upon a time in a world far far away"
要将其应用于您的代码,只需将string
替换为article.text
即可。另外,如果你打算使用后者,我会亲自为它创建一个辅助方法。
答案 2 :(得分:1)
您可以在视图中处理它。
article.text = "Some article text which should be shown if the length is less than 200, or else it should be truncated"
<% article_array = article.split(" ") %>
<% if article_array.length > 200 %>
<%= article_array[0..200].join(" ") %>
<%= link_to "... more", article_path(article) %>
<% else %>
<%= article.text %>
<% end %>