Ruby on rails 轨道3.2类和;子类别

Ruby on rails 轨道3.2类和;子类别,ruby-on-rails,categories,scaffolding,Ruby On Rails,Categories,Scaffolding,实际上,我正在开发一个应用程序,它需要将一个练习链接到许多子类别,这些子类别是父类别的子类别 这是我的代码: 练习.rb属于:子类别 class Exercice < ActiveRecord::Base attr_accessible :title, :description, :subcategory_id validates :title, :presence => true has_many :programmeexercices has_many :programmes

实际上,我正在开发一个应用程序,它需要将一个练习链接到许多子类别,这些子类别是父类别的子类别

这是我的代码:

练习.rb属于:子类别

class Exercice < ActiveRecord::Base
attr_accessible :title, :description, :subcategory_id

validates :title, :presence => true

has_many :programmeexercices
has_many :programmes, :through => :programmeexercices
belongs_to  :subcategory

end
类别控制器

def new
    @exercice = Exercice.new
    @subcategories = Subcategory.all 
  end

  def edit
    @exercice = Exercice.find(params[:id])
    @subcategories = Subcategory.all
  end

  def create
    @exercice = Exercice.new(params[:exercice])
    params[:subcategories][:id].each do |subcategory|
      if !subcategory.empty?
        @exercice.subcategory.build(:subcategory_id => subcategory)
      end
  end
 def new
    @category = Category.new
  end

  def edit
    @category = Category.find(params[:id])
  end

 def create
    @category = Category.new(params[:category])
  end
def new
    @subcategory = Subcategory.new
    @categories = Category.all
  end

def edit
    @subcategory = Subcategory.find(params[:id])
    @categories = Category.all
  end

  def create
    @subcategory = Subcategory.new(params[:subcategory])

    params[:categories][:id].each do |category|
      if !category.empty?
        @subcategory.category.build(:category_id => category)
      end
  end
子类别\u控制器

def new
    @exercice = Exercice.new
    @subcategories = Subcategory.all 
  end

  def edit
    @exercice = Exercice.find(params[:id])
    @subcategories = Subcategory.all
  end

  def create
    @exercice = Exercice.new(params[:exercice])
    params[:subcategories][:id].each do |subcategory|
      if !subcategory.empty?
        @exercice.subcategory.build(:subcategory_id => subcategory)
      end
  end
 def new
    @category = Category.new
  end

  def edit
    @category = Category.find(params[:id])
  end

 def create
    @category = Category.new(params[:category])
  end
def new
    @subcategory = Subcategory.new
    @categories = Category.all
  end

def edit
    @subcategory = Subcategory.find(params[:id])
    @categories = Category.all
  end

  def create
    @subcategory = Subcategory.new(params[:subcategory])

    params[:categories][:id].each do |category|
      if !category.empty?
        @subcategory.category.build(:category_id => category)
      end
  end
练习表单视图我想:为练习分配子类别

      <li id="p-select">
        <% for subcategory in Subcategory.find(:all) %>
        <div class="row">
          <section class="twelve columns">
            <article class="valign row">
              <div>
                <label class="checkbox">
                   <%= check_box_tag "checkboxInput", subcategory.id, @exercice.subcategories.include?(subcategory) %>                                    
                </label> 
              </div>
               <div>
                <h3><%= exercice.title %></h3>
              </div>                       
          </article>
          <% end %>
          </section>
        </div>
      </li>
    </li>
  • 子类别\u表单视图我想:为子类别分配一个类别

    class Category < ActiveRecord::Base
    attr_accessible :name
    
    has_many :exercices, :through => :subcategories
    has_many :subcategories
    end
    
    <li class="field">
          <%= f.label :category %><br />
          <%= f.collection_select(:category_id, @categories, :id, :name, :include_blank => "Please select") %>
      </li>
    

  • “请选择”)%%>
  • 不管是哪种形式,我都会收到一条错误消息:

    =>子类别/新:

    NoMethodError in Subcategories#new
    undefined method `category_id' for #<Subcategory:0x4f676b8>
    
    app/views/subcategories/_form.html.erb:16:in `block in _app_views_subcategories__form_html_erb___180268787_42055560'
    app/views/subcategories/_form.html.erb:1:in `_app_views_subcategories__form_html_erb___180268787_42055560'
    app/views/subcategories/new.html.erb:3:in `_app_views_subcategories_new_html_erb___1058729489_29352300'
    app/controllers/subcategories_controller.rb:30:in `new'
    
    子类别中的命名错误#新增 未定义的方法“category_id”# app/views/subcategories/_form.html.erb:16:in`block in_app_views_subcategories_form_html_erb_180268787_42055560' app/views/subcategories/_form.html.erb:1:in`_app_views_subcategories_form_html_erb___180268787_42055560' app/views/subcategories/new.html.erb:3:in`_app_views_subcategories_new_html_erb_1058729489_29352300' app/controllers/subcategories_controller.rb:30:in'new' =>练习/新:

    NoMethodError in Exercices#new
    undefined method `subcategories' for #<Exercice:0x4c992c0>
    
      app/views/exercices/_form.html.erb:31:in `block (2 levels) in _app_views_exercices__form_html_erb__725096104_41604048'
    app/views/exercices/_form.html.erb:25:in `each'
     app/views/exercices/_form.html.erb:25:in `block in _app_views_exercices__form_html_erb__725096104_41604048'
     app/views/exercices/_form.html.erb:2:in `_app_views_exercices__form_html_erb__725096104_41604048'
     app/views/exercices/new.html.erb:3:in `_app_views_exercices_new_html_erb___924742088_42063192'
     app/controllers/exercices_controller.rb:31:in `new'
    
    exercies中的命名错误#新增
    未定义的方法“子类别”#
    app/views/exercies/_form.html.erb:31:in`block(2层)in_app_views\u exercies\u form\u html\u erb\u 725096104\u 41604048'
    app/views/exercies/_form.html.erb:25:in'each'
    app/views/exercies/_form.html.erb:25:in`block in_app_views_exercies_form_html_erb_725096104_41604048'
    app/views/exercices/_form.html.erb:2:in``应用程序视图_exercices _表单_html _erb _725096104 _41604048'
    app/views/exercices/new.html.erb:3:in`_app\u views\u exercices\u new\u html\u erb\u 924742088\u 42063192'
    app/controllers/exercices\u controller.rb:31:in'new'
    

    有人知道我错在哪里吗?谢谢:)

    老实说,我认为您需要回去重新编写大量代码

    您在表单中调用了
    exercies.subcategories
    ,这导致了第二个错误,因为
    练习
    属于:subcategory
    ,因此每个练习只能有一个子类别

    您正在遍历所有子类别,以便在练习表单上为每个子类别提供一个复选框,这表明您实际上希望一个练习包含许多子类别

    您已将复选框命名为tax
    checkBoxInput
    ,然后您希望控制器中有一个参数
    subcategories[]

    您还将输出每个子类别的练习标题

    因此,在尝试修复特定错误之前,我会后退几步,整理大量代码逻辑。

    好的,我明白了

    我想要的是: 一个练习有多个子类别,只有一个类别。 子类别只有一个类别。 一个类别有多个子类别

    ****class Exercice < ActiveRecord::Base****
      attr_accessible :title, :subcategory_id
    
      has_many :subcategories
      has_one :category, :through => :subcategories
    
    
    ****class Category < ActiveRecord::Base*****
      attr_accessible :name
    
      has_many :subcategories
      has_many :exercices, :through => :subcategories
    
    
    ***class Subcategory < ActiveRecord::Base****
      attr_accessible :name, :category_id
    
      belongs_to :category
      has_many :exercices
    
    ****类练习:子类别
    ****类类别:子类别
    ***类子类别

    是吗?

    也许值得花更多的精力来提供有关错误的一些细节。例如,他们的stacktrace是什么?此外,您的表单代码似乎有点混乱,例如:
    用于子类别中的练习。查找(:all)
    是练习还是子类别?没错,我编辑了错误消息,还修改了复选框标记的内容。我看不出这些错误是从哪里来的,你能帮忙吗?离题了,但一年后当你意识到“锻炼”的拼写错误时,它真的会让你恼火——我现在要修改它。但它是法语!!!:)编辑:我在muh文本中修改了错误的英语单词,对此我很抱歉:)