首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails用户定义视图

Rails用户定义视图
EN

Stack Overflow用户
提问于 2014-09-23 20:34:27
回答 1查看 58关注 0票数 0

我试图在Rails中创建用户定义的视图。

我对每个视图都有一个uview记录。它包含一个名为ufields的hstore字段。在ufields中,我存储表视图中将要使用的列的名称。

我可以这样创建表的thead

代码语言:javascript
复制
  <thead>
  <tr>
    <% uview.ufields.each do |key, val| %>
        <th><%= key %></th>
    <% end %>
  </tr>
  </thead>

但是,如何定义tbody的字段。

这不管用:

代码语言:javascript
复制
  <tr>
    <% uview.ufields.each do |key, val| %>
        <% ufield = "vehicle." + key %>
        <td><%= ufield %></td>
    <% end %>
  </tr>

这只会产生类似于这个vehicle.name的行。

有办法让这种事发生吗?<td><%= vehicle.name %>

这不管用,但可能会让你知道我想做什么:

代码语言:javascript
复制
             <td><%= <%= ufield %> %></td>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-23 20:49:01

尝试:

代码语言:javascript
复制
<% uview.ufields.each do |key, val| %>
    <td><%= vehicle[key] %></td>
<% end %>

实际上,你可能会被诱惑去做:

代码语言:javascript
复制
vehicle.send key
vehicle.public_send key

但是您会暴露出严重的缺陷,因为您信任用户的输入

另一种选择是在车辆类别中:

代码语言:javascript
复制
WHITELISTED_USER_ATTRS = %w(name id) #add what you need but not stuff like destroy etc...

def user_input(key)
  if WHITELISTED_USER_ATTRS.include?(key.to_s)
    vehicle.send key
  else
    ""
  end
end

然后在下列情况下:

代码语言:javascript
复制
<% uview.ufields.each do |key, val| %>
    <td><%= vehicle.user_input(key) %></td>
<% end %>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26004277

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档