Я действительно работаю над приложением, которое должно связывать упражнение со многими подкатегориями, а подкатегории - это дочерние элементы родительской категории.Rails 3.2 Категория и подкатегория
Это мой код:
Exercice.rb BELONGS_TO: подкатегория
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
category.rb has_many: Упражнения через: подкатегорий & has_many: подкатегорий
class Category < ActiveRecord::Base
attr_accessible :name
has_many :exercices, :through => :subcategories
has_many :subcategories
end
subcategory.rb BELONGS_TO: Категория & has_many: Упражнений
class Subcategory < ActiveRecord::Base
attr_accessible :name, :category_id
belongs_to :category
has_many :exercices
end
Exercices_controller
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
Category_controller
def new
@category = Category.new
end
def edit
@category = Category.find(params[:id])
end
def create
@category = Category.new(params[:category])
end
Subcategory_controller
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
Exercice вид _form Я хочу: Назначить подкатегории для осуществления
<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>
Подкатегория _form вид Я хочу: назначить категорию для подкатегорий
<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'
=> exercice/новый:
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'
Любой знает, где я не прав? Спасибо :)
Возможно, стоит немного сконцентрироваться на предоставлении некоторых сведений об ошибках. Что такое стек для них, например? Также ваш код формы кажется немного смущенным, например: 'для упражнений в Subcategory.find (: all)' это упражнение или подкатегория? – Shadwell
Вы правы, я редактировал сообщения об ошибках, и я также изменил содержимое check_box_tag. Я не могу понять, откуда возникают ошибки, можете ли вы помочь? –
Отключить тему, но это действительно вызовет раздражение вас через год, когда вы поймете, что неправильно произносили «упражнение» - я бы поправил его сейчас. – snowangel