【发布时间】:2014-07-18 02:57:36
【问题描述】:
注意:这个问题的表述试图模拟一个应用程序的时间演变。因此,每个上下文都是前一个上下文的演变,也就是在迭代之后添加了字段/功能
=== TIME 0 中的上下文
- 我有一个
User型号的应用程序。该模型有一个名为info的hstore 列 -
info列打算存储密钥['name', 'first_surname', 'phone']。也使用store_accessor :name, :first_surname, :phone。 - 创建了几个用户,填充了这三个字段。假设我们有 10 个这样的用户。
- 当我想显示用户的个人资料时,我这样做:
(这会将用户表的每个字段呈现在一个表中,包括info hstore 列中的所有字段。)
Reference:"PROFILE SHOW"
#app/views/users/profile.html.erb
<h3>Profile</h3>
<table class="table table-striped">
<tbody>
<tr><th>Email</th><th><%=current_user.email%></th></tr>
<% unless current_user.info.nil? %>
<% current_user.info.each do |key,val| %>
<tr>
<th><%=key.gsub('_',' ').titleize%></th>
<th><%=val%></th>
</tr>
<% end %>
<% end %>
</tbody>
</table>
=== TIME 1 中的上下文
- 现在我决定为每个用户存储
city、province、passport。 - 我会将这些新字段作为键/值对存储在
User的info列中。 - 每当有新的注册时,注册表单都会显示这三个字段 (
city,province,passport),以便用户填写。 - 当我想呈现最近创建的用户的个人资料时,Ref.“PROFILE SHOW”(见上文)中使用的代码效果很好。
问题:如何修改代码“PROFILE SHOW”,使其在上下文 TIME 0 期间也适用于创建的前 10 个 User。以这样的方式呈现页面
|province | |
|city | |
|passport | |
即在上下文 TIME 0 期间 info 中不存在的那些字段的空白。
换句话说:如何跟踪hstore 列中的“潜在”字段,即存在于其他实例中但不存在于您的实例中的字段。
这是可取的,因为我也想在编辑页面中显示它们,以便用户可以填写以前不存在的字段。
到目前为止我的方法:
- 将所有字段保存在一个数组中,并在控制器方法中实例化,然后更改“PROFILE SHOW”代码:
#app/controllers/users_controller.rb
def profile
@info_attributes=%w(name first_surname phone passport city province)
end
#app/views/profile.html.erb
<% @info_attributes.each do |key| %>
...
<% end %>
- 做同样的事情,但将该属性数组保存在某种全局变量/缓存中,该变量在控制器方法中读取,并分配给实例变量。
谢谢!
【问题讨论】:
标签: ruby-on-rails ruby postgresql hstore