我创建了一个呈现数据表视图的Cell,我想将其重用于其他表视图。对于该数据的每一行,我希望将一些独特的元素与标准列混合在一起。现在,我的Cell show.html.slim
的简化部分版本如下:
- users.each do |user|
tr
/ A column unique to User
td
= link_to_if current_user == user, "Groups", user_groups_path(user)
/ Common code that can be shared across other tables
td user.name
我希望能够从这个级别提取用户特定的代码并从上面注入它。 Cells documentation州:
如果有疑问,请将视图的嵌套部分封装到单独的单元格中。您可以在单元格中使用#cell方法来实例化嵌套单元格。
但是,很难简单地实例化一个新的Cell( edit:在表格单元格中):
user
)。current_user
)。将此类部分渲染注入Cell的选项有哪些?它们中的任何一种都是首选的解决方案吗?
答案 0 :(得分:0)
我最后只是在我的单元格上定义了一些接受块
的方法class DataTableCell < Cell::ViewModel
def row_prefix(&blk)
@_row_prefix = blk
end
def render_row_prefix(item)
return unless @_row_prefix
@_row_prefix.call(item).call
end
end
每当我想渲染DataTableCell
时,我都会提供一个块:
cell = cell(:data_table)
cell.row_prefix do |item|
cell(:users_row_prefix, user: item, current_user: current_user)
end
在我的手机内,我可以拨打render_row_prefix(row_item)
。
我没有使用这种解决方案,因为它可能是一种重量级的,但确实有效。