如果在一个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