0

我正在建立一个基本上是一个小型内容管理系统的网站。(从某种意义上说,用户将能够动态更改网站的大部分内容)

在我的 rails 应用程序中,我有两个模型,一个类别和一个子类别。一个Category有很多Subcategories,一个Subcategory属于一个Category。

每个子类别都有一个位置字段,指示它在类别下的显示位置。

按表单创建子类别时,我希望用户可以选择从数据库中所有类别的列表中选择类别(我工作得很好)。然后,我希望根据该类别中当前可用的职位来更新职位字段(一个下拉框)。

我目前在我的应用程序控制器中跟踪子类别的可用位置的想法是:

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 %>

这段代码的问题是我需要它显示为一个 int 以便我可以向它添加 +1,否则当数据库中没有子类别时它只会显示空白并且不允许我选择“1”位置.

所以,我需要找到一种方法来更新该字段以显示该类别中的可用职位,但我不知道该怎么做。任何帮助将不胜感激。

4

1 回答 1

1

您的问题有不同的解决方案。

如果继续使用您的无 AJAX 解决方案,请尝试覆盖或仅创建不同的方法Category以返回现有子类别和一个新的(仅用于存根):

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 回答