model自定义属性的使用

by 小赓赓。 at over 8 years ago, last updated at over 8 years ago
W

如果在一个model中想使用另一个model中的属性,可以自定义.比如博客model中如果想使用标签,而标签是属于tags这个model,就可以使用自定义属性.只需两步:

1.在博客的model中定义方法

def tags_string= one_tags
    one_tags.split(',').each do |tag|
      one_tag = Tag.find_by(title: tag)
      one_tag = Tag.new(title: tag) unless one_tag
      self.tags << one_tag        
    end
  end

2.在view中使用,如使用input标签的话,可以利用其name和value属性赋值,在我们controller的new之后,通过key-value的形式,从而将value中的内容作为参数传递给model中的def方法

<div class="form-group">
  <input type="text" name="blog[tags_string]" value="<%= @blog.tags.map(&:title).join(',')%>"></input><small>(标签用逗号分隔)</small>
</div>

以上是我们将数据库中没有的属性进行自定义,当然也可以对已经拥有的属性或者说原生的属性再次定义,也就是重定义,这样做实际就是覆盖了数据库中这个属性,用attr_accessor,write_attribute等关键字:

class Blog < ActiveRecord::Base
  def content= one_content
    write_attribute :content, one_content * 2
  end
end

同时如果想使用一些gem包来作为一些属性也可以自定义,如:想把标题的汉字转化为拼音的形式,在引入gem包gem 'chinese_pinyin'之后同样可以定义:

class Blog < ActiveRecord::Base
  def title_pinyin
    Pinyin.t self.title
  end
end