让我们建议情况:EAV 数据模型(通用)。存在实体表、属性表和值表。我已经为所有这些东西做了脚手架。接下来,我们将进入 Values->New 页面。它在值表中创建新值。在这里,我有entity_id
和attribute_id
领域。我想从属性表中添加动态字段。因此,在 New 操作的 Values 控制器中,我有这个:
def new
@value = Value.new
@attribute = Attribute.find(:all) #It is not correct, it will search ALL existing attributes for all entities, I'll fix it later
respond_to do |format|
format.html # new.html.erb
format.json { render json: @value }
end
end
接下来我们去 Views->Values->_form.html.erb 和生成部分在这里:
<% @attribute.each do |attr| %>
<div class="field">
<%= f.label attr.name %><br />
<%= text_field_tag(controller.controller_name.singularize+'['+attr.name+']') %>
</div>
<% end %>
看看这个字符串: <%= text_field_tag(controller.controller_name.singularize+'['+attr.name+']') %>
它有些不是“专业 Ruby”的风格。它看起来像马车,像废话。(但它有效)。
最后,问题是:如何使它成为“专业的 Ruby 风格”,也许它必须看起来像f.text_field attr.name
(它不起作用)。怎样成为?:)