Это сообщение об ошибке, которое указывает на вашу проблему.
No route matches {:action=>"show", :controller=>"hairstyles", :id=>nil},
missing required keys: [:id]
Он пытается перейти к действию show в контроллере причесок без параметра ID. Почему он пытается туда попасть?
def create
@comment = Comment.new(comment_params)
@hairstyle = Hairstyle.find(params[:hairstyle_id])
@comment.save
redirect_to hairstyle_path(@comment.hairstyle) # this line
end
@comment
не имеет прически. Вам нужно добавить ассоциацию с чем-то вроде:
def create
@comment = Comment.new(comment_params)
@hairstyle = Hairstyle.find(params[:hairstyle_id])
@hairstyle.comments << @comment
@comment.save
redirect_to hairstyle_path(@comment.hairstyle)
end
Редактировать После просмотра репо я смог отследить проблемы и разобраться в них.
Советы:
- В ваших журналах не указывается, почему проверка вашей модели не удалась. Итак, вы хотите убедиться, что вы используете это в разработке, отлавливать ошибки и регистрировать их. (Например, вы можете использовать
save!
вместо save
, чтобы обеспечить выдачу ошибок.
- Ваш код немного странный. Я рекомендую прочитать лучшие практики для Ruby on Rails. Вы также должны иметь тесты в своем репо.
Решение (насколько я мог проверить, не делая всего этого):
в hairstyle.rb
модели у вас есть эти строки:
validates :content, presence: true
validates :content, length: { minimum: 20 }
Но Hairstyle
не имеет поля содержимого. Так что сразу же вы не сможете сохранить прически (по крайней мере, я не смог).
в comment.rb
модели у вас есть эта строка:
belongs_to :hairdresser
Но в вашей схеме Comment
не имеет поля hairdresser_id
. Так что проверка не пройдена, потому что Hairdresser must exist
выброшено. Но потом, когда я включаю парикмахер, он выбрасывает (can't write unknown attribute hairdresser_id)
. Итак, вы хотите запустить эту миграцию:
rails g migration AddHairdresserToComments hairdresser:references
Это должно вот-вот исправить.
Конечно, вам нужно убедиться, что вы передаете все правильные параметры по пути. Мне было сложно тестировать ваши модели, потому что все требуется вам. Лично мне нравится, чтобы все было просто. Только требуют того, что абсолютно необходимо. Все остальное должно быть оставлено на усмотрение пользователя.