Я медленно приобретаю навык направляющих, и благодаря нескольким людям у меня теперь есть основное схватывание отношений базы данных и ассоциаций и т.д. Вы видите мои предыдущие вопросы здесь: отношения базы данных Rails
Я имею, устанавливают мои модели приложений со всеми необходимыми has_one и has_many: через и т.д., но когда я иду, чтобы добавить kase и выбрать из компании из выпадающего списка - это, кажется, не присваивает идентификатор компании kase.
Вы видите видео приложение и ошибка здесь: http://screenr.com/BHC
Вы видите полную разбивку приложения и соответствующего исходного кода в Мерзавце repo здесь: http://github.com/dannyweb/surveycontrol
Если бы кто-либо мог бы пролить некоторый свет на мою ошибку, я был бы, ценят его очень!
Спасибо,
Danny
Вы настроили свои модели Kase и компании как взаимно однозначные (см. http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html ). Вероятно, это не то, что вы хотели. Может быть, если бы вы могли объяснить свои предполагаемые отношения, я мог бы сказать вам, в чем ваша ошибка?
class Company < ActiveRecord::Base
has_many :kases
has_many :people
end
class Kase < ActiveRecord::Base
belongs_to :company # foreign key: company_id
has_and_belongs_to_many :people # foreign key in join table
end
class Person < ActiveRecord::Base
has_and_belongs_to_many :kases # foreign key in join table
end
Показаны только соответствующие части. Это должно быть шагом в правильном направлении. Вам понадобится соединительная таблица для отношения «многие ко многим» или, альтернативно, для ее моделирования с помощью «has_many: through». Зависит от того, нужно ли хранить другие свойства в объединении. См. Ссылку выше для подробностей.
Я считаю, что это должно быть
class Company < ActiveRecord::Base
has_many :people
has_many :kases
end
class Kase < ActiveRecord::Base
belongs_to :company
belongs_to :person
end
class Person < ActiveRecord::Base
belongs_to :company
has_one :kase
end
На ваш взгляд ( app / views / kases / new.html.erb
) у вас есть
<li>Company Select<span><%= f.select :company_id, Company.all %></span></li>
Попробуйте изменить часть выбора на
<%= f.select :company_id, Company.all.collect {|m| [m.name, m.id]} %>
Предложение
Я также заметил, что у вас есть четыре метода в вашем контроллере для поиска Kases по статусу. Вы можете сделать это в своей модели, используя named_scope
. Это примерно так:
named_scope :active, :conditions => {:kase_status => 'Archived'}
А затем, когда вам нужно показать только активные Kases, вы вызываете Kase.active
. То же и с другим статусом.