ruby ActiveRecord追加

来源:互联网 发布:软件二次开发难吗 编辑:程序博客网 时间:2024/06/01 09:41

在做地址添加修改时,会遇到一个问题, 我们一般存储的是地址编码, 但我们在列表显示需要显示地址名称, 所以需要想结果集追加数据, 在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