0
我的應用程序中有批評和電影,我添加了crtics的功能以將電影添加到他們的收藏夾。既不添加也不刪除正在工作。嘗試添加時,它試圖發出修補程序請求而不是帖子。試圖刪除時,它不能使用刪除方法,因爲我不認爲它找到要刪除的對象。不知道爲什麼會這樣。我將在下面添加所有代碼和一些服務器日誌。真的需要一些幫助來解決這個問題。添加和刪除收藏夾不起作用
查看:
<%= form_for(current_critic.favorites.create, remote: true) do |f| %>
<%= hidden_field_tag :movie_id, @movie.id %>
<%= f.submit "Favorite" %>
<% end %>
其他
<%= form_for(current_critic.favorites.find_by(movie_id: @movie.id), html: { method: :delete }, remote: true) do |f| %>
<%= f.submit "Un-Favorite" %>
<% end %>
控制器
class FavoritesController < ApplicationController
def create
movie = Movie.find(params[:movie_id])
current_critic.favorite(movie)
redirect_to current_critic
end
def destroy
movie = Movie.find(params[:id])
current_critic.un_favorite(movie)
redirect_to current_critic
end
end
從評論家模型
has_many :favorites, dependent: :destroy
has_many :movies, through: :favorites
def favorite(movie)
favorites.create(movie_id: movie.id)
end
def un_favorite(movie)
favorites.find_by(movie_id: movie.id).destroy
end
適用代碼從電影模式
has_many :favorites, dependent: :destroy
has_many :critics, through: :favorites
最喜愛的模型
適用代碼
class Favorite < ActiveRecord::Base
belongs_to :critic
belongs_to :movie
end
適用航線試圖添加到收藏夾時
resources :favorites, only: [:create, :destroy]
服務器日誌
Started PATCH "/favorites/28" for 99.39.164.184 at 2015-12-01 02:42:17 +0000
ActionController::RoutingError (No route matches [PATCH] "/favorites/28"):
服務器日誌嘗試取消收藏時
Started DELETE "/favorites/27" for 99.39.164.184 at 2015-12-01 03:18:24 +0000
Processing by FavoritesController#destroy as JS
Parameters: {"utf8"=>"✓", "commit"=>"Un-Favorite", "id"=>"27"}
Movie Load (0.1ms) SELECT "movies".* FROM "movies" WHERE "movies"."id" = ? LIMIT 1 [["id", 27]]
Completed 404 Not Found in 2ms (ActiveRecord: 0.1ms)
ActiveRecord::RecordNotFound (Couldn't find Movie with 'id'=27):
app/controllers/favorites_controller.rb:10:in `destroy'
在此先感謝。如果有其他代碼會有幫助,請告訴我。
更新:我剛剛在控制檯中測試了喜好和un_favorite方法,他們都工作;然而,有些奇怪的事情發生在id似乎不是遞增1,而是看似隨機數的情況下發生。
這工作謝謝!如果你不介意,你能否澄清爲什麼這些工作?我很困惑,爲什麼創建返回一個已經存在的記錄,你能解釋它爲什麼這樣做,爲什麼新的不?對於第二種解決方案,現在它似乎破壞了控制器中的最愛,那麼模型中的un_favorite方法是不必要的? –
@CaedBudris:當記錄持續到數據庫時,將生成'id'。如果您查看api文檔中的active_record http://apidock.com/rails/ActiveRecord/Base/create/class和http://apidock.com/rails/v3.2.13/ActiveRecord/Base/new/class:' new'只能實例化記錄,而'create'會保留它。 –
第二個,'current_critic.favorites.find_by(movie_id:@ movie.id)'是'Favorite'對象,所以form_for將返回Favorite對象的id。你不能用'Favorite'的id來查詢'Movie'記錄,對吧? –