2011-04-21 3 views
0

Hm, первый раз я вижу это, когда я хочу, чтобы удалить строку: (Я хочу удалить respondent.email) я получил:проблема с удалением строки

Mysql::Error: Cannot delete or update a parent row: a foreign key constraint fails (`survey_development`.`inquiries`, CONSTRAINT `inquiries_ibfk_2` FOREIGN KEY (`respondent_id`) REFERENCES `respondents` (`id`)): DELETE FROM `respondents` WHERE `id` = 4 

PS

users (table): id, email 
questions (table): id, text 
inquiries: question_id, user_id 
answers: inquiry_id, text 

Модель пользователей:

has_many :inquiries 
has_many :questions, :through => :inquiries 
has_many :answers, :through => :inquiries 

вопрос модели:

has_many :inquiries, :dependent => :destroy 
has_many :answers, :through => :inquiries, :dependent => :destroy 

ответ модель

belongs_to :inquiry 
    belongs_to :question 

запрос модель

belongs_to :question 
    belongs_to :users 
    has_one :answer, :dependent => :destroy 

respondents_controller

# DELETE /respondents/1 
    def destroy 
    @respondent.destroy 
    head :ok 
    end 

respondent_model

class Respondent < ActiveRecord::Base 
    has_many :inquiries 
    has_many :questions, :through => :inquiries 
    has_one :answer, :through => :inquiry 
end 
+0

Итак, как мы знаем, как вы удаляете строку? Показать код – fl00r

+0

ok.Следующий вопрос. как мы знаем, как вы получаете '@ респондента'? Показать весь код, связанный с вашим делом, добавил человек – fl00r

+0

, надеюсь, вы имели в виду это? – leeroygenehax

ответ

0

Начнем.

Во-первых - это неправильный код:

class Respondent < ActiveRecord::Base 
    has_many :inquiries 
    has_many :questions, :through => :inquiries 
    has_one :answer, :through => :inquiry 
end 

Во-вторых, у вас нету получил respondent_id в вашем inquiries столе, и вы должны определить

has_many :respondents 

в вашей Inquiry модели.

В-третьих, вы не можете использовать этот

has_one :answer, :through => :inquiry 

, насколько ассоциация inquiry не определена.

Таким образом, вы должны

  • добавить respondent_id к вашей inquiries таблице
  • добавить belongs_to :respondent ассоциацию к вашей Inquiry модели
  • удалить has_one :answer, :through => :inquiry ассоциации с Respondent модели. Или выясните, что это такое, и добавьте новую ассоциацию, чтобы исправить это.

And read some articles about Rails associations.

Ваша проблема - не плохой код. Ваша проблема в том, что вы не понимаете, что делаете. Вы должны чувствовать Rails, и вы должны любить Rails. Благословит вас Бог

Также у вас нет question_id в вашей таблице answers.

+0

ty! м, все еще не работает, по-прежнему та же ошибка, но несколько минут назад я не могу редактировать пользователя, но теперь могу, но не могу удалить. – leeroygenehax

+0

В вашем коде есть много проблем. (Только в тех 20 строках, которые я вижу). У вас нет внешних ключей в базе данных для ассоциаций. Например, если вы сказали: 'answer belongs_to: question', но вы не добавили ссылку' question_id' в свою таблицу ответов '' – fl00r

+0

, и вы должны добавить 'запрос has_many: respodents' в вашу модель запроса, и вы должны добавить ссылочный ключ' ответить на его стол и так далее ... Беттер читал об ассоциациях, человек – fl00r

Смежные вопросы