我有以下情形:具有相同名称属性的一种形式的不同选择?
class Product < ActiveRecord::Base
belongs_to :categories
end
class Category < ActiveRecord::Base
has_many :products
end
分类表中有2级嵌套,例如。 主要类别为'男士',子类别为'配件',子类别为'手表'。现在
当用户创建新的产品,他必须选择类别(仅主类需要,但他也可以选择分和小分类别可选)。
我的想法如下:我创建了3个不同的选择框,名称为“product [category_id]”,因此只有最后一个选定的值将通过params [:product] [:category_id]发送到服务器 。
<div class="col-md-2 main-category">
<small> Main category? required </small>
<%= f.select :category_id,
Category.where('category_id IS ?', nil).collect {|c| [c.name, c.id]},
{ include_blank: "Select category..." },
id: 'main-category', class: 'form-control' %>
</div>
<div class="col-md-2 category-level-1">
<small> What type? optional </small>
<%= f.select :category_id, {}, {}, class: 'form-control' %>
</div>
<div class="col-md-2 category-level-2">
<small> What type? optional </small>
<%= f.select :category_id, {}, {}, class: 'form-control' %>
</div>
第二(子类)和第三(子 - 子类别)是初始空({},{}),并通过CSS隐藏(显示:无),将通过AJAX调用来填充。
$('#main-category, .category-level-1 > select').change(function() {
var selectBox = this.id;
var selectedValue = $(this).val();
var url = '/categories/' + selectedValue + '/subcategories';
$.get(url, function(data) { createSelect(data, selectBox); });
});
function createSelect(data, selectBox) {
var $currentSelect = null;
if (selectBox == 'main-category') {
$('.category-level-1').show();
$('.category-level-2').hide();
$('.category-level-1 > select').find('option').remove();
$currentSelect = $('.category-level-1 > select');
}
else {
$('.category-level-2').show();
$('.category-level-2 > select').find('option').remove();
$currentSelect = $('.category-level-2 > select');
}
$currentSelect.append('<option selected disabled>Select Category...</option>');
for(var i=0; i<data.length; i++) {
$currentSelect.append('<option value="' + data[i].id + '">' + data[i].name +
'</option>');
}
}
当Ajax调用发送到以下航线(类别控制器)
def subcategories
id = params[:id]
@subcategories = Category.where('category_id = ?', id)
render json: @subcategories
end
因此对于最终的结果我有以下:
首先是正常的,有不同的以一种手工创建的相同名称的输入,就像我在这个例子中做的那样?由于某种原因,它对我来说看起来像是“代码味道”。我对rails比较陌生,所以想要问am'i违反了这些代码的一些好的做法吗?你能提出更好的方法来达到相同的结果吗?
我不知道Rails,但在浏览器端,如果您有多个具有相同名称的表单元素,它们将以标准格式提交发送到服务器。如果你真的想使用服务器端的所有值,我会说这是“正常的”,但是如果你的Rails代码故意忽略重复,我会说这不是一种“正常”的方式来实现这种效果,但如果它的工作原理...(作为一个非Rails的家伙,我不能建议你的项目更好的选择) – nnnnnn