0

基本的に小さなコンテンツ管理システムである Web サイトを構築しています。(ユーザーがサイトのほとんどのコンテンツを動的に変更できるという意味で)

私の Rails アプリには、Category と Subcategory の 2 つのモデルがあります。カテゴリには多くのサブカテゴリがあり、サブカテゴリはカテゴリに属します。

各サブカテゴリには位置フィールドがあり、カテゴリの下に表示される場所を指定します。

フォームでサブカテゴリを作成するとき、データベース内のすべてのカテゴリのリストからカテゴリを選択するオプションをユーザーに持たせたいです(これは正常に機能しています)。次に、そのカテゴリ内で現在利用可能なポジションに基づいて、ポジション フィールド (ドロップダウン ボックス) を更新します。

Application Controller でサブカテゴリの利用可能な位置を追跡するための現在のアイデアは次のとおりです。

def subcategory_count(subcategory)
category = subcategory.category
@count = category.subcategories.count
end 

次に +1 を追加し@countて、使用可能な位置 +1 を取得します。(これを行うより良い方法がある場合は、私に知らせてください。)

私は現在、動的選択メニューの改訂版である Ryan Bates の railscasts 88 改訂版をフォローしています。これが私のフォームが今どのように見えるかです。

<%= form_for(@subcategory) do |f| %>
<p>
<%= f.label(:name) %>
<%= f.text_field :name %>
</p>
<p>

<%= f.label(:category_id) %>  
<%= f.collection_select :category_id, Category.order(:position), :id, :name,     include_blank: true %>

</p>

<p>
<%= f.label :position, "Position" %>
<%= f.grouped_collection_select :position, Category.order(:position), :subcategories,  :name, :position, :position%>
</p>
<p>


<%= f.submit("Submit") %>
</p>
<% end %>

このコードの問題は、+1を追加できるようにintとして表示する必要があることです。そうしないと、データベースにサブカテゴリがない場合、空白が表示され、「1」の位置を選択できなくなります.

そのため、フィールドを更新してカテゴリ内の利用可能なポジションを表示する方法を見つける必要がありますが、それを正確に行う方法がわかりません。どんな助けでも大歓迎です。

4

1 に答える 1

1

あなたの問題にはさまざまな解決策があります。

AJAX を使用しないソリューションを引き続き使用する場合は、オーバーライドするか、別のメソッドを作成してCategory、既存のサブカテゴリと新しい 1 つのサブカテゴリを返します (スタブ目的のみ)。

class Category
has_many :subcategories

def subcategories_with_placeholder
  result = [Subcategory.new :position => (subcategories.length + 1)]
  subcategories.each{|s| result << s}
  result
end
#other class code
end

そして交換

<%= f.grouped_collection_select :position, 
  Category.order(:position), 
  :subcategories,
  :name, 
  :position, 
  :position%>

と:

<%= f.grouped_collection_select :position, 
  Category.order(:position), 
  :subcategories_with_placeholder,  
  :name, 
  :position, 
  :position%>
于 2012-02-11T16:27:30.830 に答える