我一直在使用parameterize
制作友好的网址。示例:@article.title.parameterize
。问题是像“我在这里”这样的标题导致“我在这里”,我想要“我在这里”
因此,我想创建一个我的模型可以使用的方法:
parameterize_with_apostrophe_removal (string)
string.to_s.gsub("\'", "").parameterize
end
使用rails 4如何正确设置模型可以共享的模型助手?感谢
答案 0 :(得分:2)
Rails担心有选择地将此类行为添加到模型中。如果此行为仅适用于您的某些模型,那么我将采用这种方法:
# app/models/concerns/title_slugs.rb
module TitleSlugs
extend ActiveSupport::Concern
def to_slug
title.to_s.tr("'", '').parameterize
end
end
# app/models/article.rb
class Article < ApplicationRecord
include TitleSlugs
end
如果您在所有模型和不同字段中使用此行为,我可以继续将其添加到ApplicationRecord
:
# app/models/application_record.rb
class ApplicationRecord < ActiveRecord::Base
self.abstract_class = true
def to_slug(field_name)
send(field_name).to_s.tr("'", '').parameterize
end
end
class Article < ApplicationRecord
end
然后当你继承时,你会得到这种行为:
article.to_slug(:title) #=> 'your-slug'
答案 1 :(得分:0)
我认为这正是模型中“关注点”的含义。分享方法
http://api.rubyonrails.org/classes/ActiveSupport/Concern.html