ruby-on-rails - 嵌套设置 Rails 应用程序,辅助方法未返回我需要的内容

标签 ruby-on-rails ruby-on-rails-3 nested-sets

我正在使用 Sky Eagles 嵌套 gem here

我只允许深度为两深,并且我有一个保存前过滤器检查深度,但我似乎无法让它在 View 中限制它,所以客户甚至没有选项来选择它。我正在使用 View 助手,如下所示。

app/views/_form.html.erb

<%= form_for(@category) do |f| %>
  <p>
    <%= f.label(:name) %>
    <%= f.text_field :name %>
  </p>
  <p>
    <%= f.label(:parent_id) %>
    <%= f.select :parent_id, nested_set_options(Category.roots.to_a, @category) {|i, level| "#{'-' * level} #{i.name}" } %>
  </p>
  <p>
    <%= f.submit("Submit") %>
  </p>
<% end %>

我主要感兴趣的是这个

<%= f.select :parent_id, nested_set_options(Category.roots.to_a, @category) {|i, level| "#{'-' * level} #{i.name}" } %>

现在它总是返回嵌套集的所有级别,但我只想显示根节点,因为我只允许两个深度。我被困在这里,因为当我查看代码here时我只看到一个包含 root 的选项,这是事实,我对此表示同意。我尝试过这样做

<%= f.select :parent_id, nested_set_options(Category.roots.to_a, @category) {|i, level| "#{'-' * level} #{i.name}" if i.level < 1} %>

但是这一切所做的只是空白了级别小于两级的选项,我需要它实际上根本不返回它们。

那么,如何让nested_set_options仅返回根,而不返回任何具有深度的类别?提前致谢

最佳答案

我认为您在这里使用了错误的助手。 nested_set_options 的编写也是为了实际获取所有后代。我建议手动添加:

f.select :parent_id, Category.roots.collect {|c| [ c.name, c.id ] }

关于ruby-on-rails - 嵌套设置 Rails 应用程序,辅助方法未返回我需要的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10159251/

相关文章:

jquery将新的li添加到嵌套集模型

mysql 仅获取嵌套集树的特殊数据

ruby-on-rails - 如何在 Rails 4 中使用 Tire gem 和 WillPaginate 对结果进行分页

ruby-on-rails - Rails 多连接 AR 查询和 where 子句

ruby-on-rails - 如何干燥 Controller 测试

ruby-on-rails - 如何使用 Rails、Carrierwave 和 Minimagick 在上传时裁剪图像?

javascript - 在 Rails 和 Javascript 中转义 "

ruby-on-rails - rails cocoon gem 没有错误也没有输出

javascript - 如何实现 Ruby 的 Array.include?在 JavaScript 中?

mysql - 使用 MYSQL 在嵌套集树中选择节点的祖先和直接子节点