我有以下情形:具有相同名稱屬性的一種形式的不同選擇?
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