如何为rails 4

时间:2017-01-15 01:17:43

标签: ruby-on-rails ruby ruby-on-rails-4

我一直在使用parameterize制作友好的网址。示例:@article.title.parameterize。问题是像“我在这里”这样的标题导致“我在这里”,我想要“我在这里”

因此,我想创建一个我的模型可以使用的方法:

parameterize_with_apostrophe_removal (string)
string.to_s.gsub("\'", "").parameterize
end

使用rails 4如何正确设置模型可以共享的模型助手?感谢

2 个答案:

答案 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