Я пытаюсь реализовать кнопку для обновления одного атрибута (установив для логического значения «Актив» значение true) для записей. Покопавшись в Интернете, я нашел следующий код для «решения» проблемы:
button_to "Add", movie_path(m, active: true), confirm: "Add this movie?", method: :put, class: "btn"
Представление создает кнопку просто отлично, и приложение правильно выполняет команду, выполняя мое действие «обновить» в MoviesController:
def update
@movie = Movie.find(params[:id])
if @movie.update_attributes(params[:movie])
flash[:notice] = "Movie was successfully updated"
else
flash[:error] = "Movie was not changed"
end
redirect_to root_path
end
После многократного нажатия этой кнопки и перезапуска движка Thinking Sphinx несколько раз (думая, что причина, по которой объект все еще отображался в моей таблице «неактивные фильмы», заключалась просто в том, что коллекцию нужно было переиндексировать), я взглянул на вывод своей консоли ( Кажется, это так и называется. Это просто стандартный вывод, который выдает всю started GET "/assets..."
чепуху, и я видел это:
Started PUT "/movies/334?m%5B%3Aactive%5D=true" for 127.0.0.1 at 2013-01-10 22:41:41 -0600
Processing by MoviesController#update as HTML
Parameters: {"authenticity_token"=>"qpcfMEVttjnQJ3Cv2f+tTYBu3/gujijQtn2+17YVPno=", "m"=>{":active"=>"true"}, "id"=>"334"}
Movie Load (0.4ms) SELECT `movies`.* FROM `movies` WHERE `movies`.`id` = 334 LIMIT 1
(0.1ms) BEGIN
Movie Exists (0.6ms) SELECT 1 AS one FROM `movies` WHERE (`movies`.`title` = BINARY '1 Hope' AND `movies`.`id` != 334 AND `movies`.`rec_form` = 'DVD-Rom') LIMIT 1
(0.2ms) COMMIT
Redirected to http://0.0.0.0:3000/
Completed 302 Found in 114ms (ActiveRecord: 1.3ms)
Обратите внимание на строку Movie Exists. WHERE ... movies.id != 334
...даже несмотря на то, что строка прямо над ней НАХОДИТ запись, использующую этот идентификатор. Это кажется плохим, верно? Просто взгляните на код, который я разместил здесь, может ли кто-нибудь увидеть, что я делаю, чтобы попытаться обновить записи, которые не соответствуют связанному с ним movie.id? Я не видел никаких других рекордов, побитых этим кодом. Если какие-либо дополнительные файлы необходимы для проверки, дайте мне знать.