在做地址添加修改时,会遇到一个问题, 我们一般存储的是地址编码, 但我们在列表显示需要显示地址名称, 所以需要想结果集追加数据, 在ruby中有一个虚拟属性就可以实现这个,我们需要在model中定义追加字段
models/user_address.rb
def region_text
Regionable.region_text(self.region_code)
end
在前端页面就可以直接使用
<% @user_addresses.each do |address| %>
<tr id=<%= dom_id(address) %> >
<td><%= address.consignee %></td>
<td><%= address.region_text %></td>
<td><%= address.address %></td>
<td><%= address.phone %></td>
<td><%= address.zipcode %></td>
<td>
<% if address.is_default != 1 %>
<%= link_to '设为默认', set_default_customer_center_user_address_path(address.id) %>
<% end %>
<%= link_to '修改', edit_customer_center_user_address_path(address.id) %>
<%= link_to '删除',
customer_center_user_address_path(address),
method: :delete,
data: { confirm: '确认要删除么?' } %>
</td>
</tr>
<% end %>
参考了Ruby on rails 实战圣经:ActiveRecord
虚拟属性(VirtualAttribute)
有时候窗体里操作的属性数据,不一定和数据库的字段完全对应。例如数据表分成first_name和last_name两个字段好了,但是窗体输入和显示的时候,只需要一个属性叫做full_name,这时候你就可以在model里面定义这样的方法:
def full_name
"#{self.first_name} #{self.last_name}"
end
def full_name=(value)
self.first_name, self.last_name = value.to_s.split(" ", 2)
end