我正在尝试实现一个按钮来更新记录的单个属性(将“活动”布尔值设置为 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..."
mumbo-jumbo,我看到了这个:
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
...即使它正上方的行使用该 ID 找到记录。这看起来很糟糕吧?只是看看我在这里发布的代码,任何人都可以看到我正在做的事情,让它尝试更新与关联的 movie.id不匹配的记录吗?我没有看到任何其他记录被此代码破坏。如果需要任何其他文件进行检查,请告诉我。