页面控制器中未定义的方法 to_slug
Posted
技术标签:
【中文标题】页面控制器中未定义的方法 to_slug【英文标题】:Undefined method to_slug in Page controller 【发布时间】:2013-04-06 00:51:36 【问题描述】:我无法理解我的这不起作用。我正在尝试添加一种方法,以便在用户创建新页面(使用 Ruby on Rails)时从页面标题创建 slug。
这是我的创建方法:
def create
@page = Page.new(params[:page])
@page.user_id = current_user.id
@page.slug = @page.title.to_slug
respond_to do |format|
if @page.save
format.html redirect_to @page, notice: 'Page was successfully created.'
format.json render json: @page, status: :created, location: @page
else
format.html render action: "new"
format.json render json: @page.errors, status: :unprocessable_entity
end
end
结束
这是我在同一个控制器底部的方法。 (pages_controller.rb) :
def to_slug(param=self.slug)
# strip the string
ret = param.strip
#blow away apostrophes
ret.gsub! /['`]/, ""
# @ --> at, and & --> and
ret.gsub! /\s*@\s*/, " at "
ret.gsub! /\s*&\s*/, " and "
# replace all non alphanumeric, periods with dash
ret.gsub! /\s*[^A-Za-z0-9\.]\s*/, '-'
# replace underscore with dash
ret.gsub! /[-_]2,/, '-'
# convert double dashes to single
ret.gsub! /-+/, "-"
# strip off leading/trailing dash
ret.gsub! /\A[-\.]+|[-\.]+\z/, ""
ret
end
slug 方法来自这个问题: Best way to generate slugs (human-readable IDs) in Rails
我不明白为什么这会产生方法未定义错误或如何修复它。任何帮助,提示或答案表示赞赏。 :)
【问题讨论】:
【参考方案1】:to_slug
方法是 PagesController 类的实例方法。对象@page.title
没有这个方法,这就是代码不起作用的原因。
有几种方法可以使to_slug
方法起作用,例如helper、decorate。但我认为最好的方法是将这样的逻辑放入模型中,因为slug
实际上是模型的一部分。我们将在保存(创建和更新)之前立即使 slug
属性可用。
所以,在Page
模型中。假设您已经拥有slug
属性。
第 1 步:设置回调
before_saving :update_slug # for create record, before actual saving
第二步:update_slug 方法
def update_slug
ret = self.title # Use title variable directly
# .... You to_slug code. Almost same.
self.slug = ret # return slug
end
以上是提供思路的基本思路,尚未验证。请自行检查和验证。希望对您有所帮助。
【讨论】:
以上是关于页面控制器中未定义的方法 to_slug的主要内容,如果未能解决你的问题,请参考以下文章
Rails 5 API 控制器中未定义的实例方法“respond_to”