Hartl의 Ruby on Rails 튜토리얼에서 샘플 앱을 구현하는 동안 이상한 문제가 발생했습니다. 나는 micropost를 삭제하면RoR Tutorial Michael Hartl Microposts를 삭제해도 사용자가 삭제됨
, 다음과 같은 상황이 발생합니다
- micropost은 삭제됩니다.
- 또한 사용자가 삭제됩니다.
- 가입 페이지로 이동하십시오.
첫 번째 단계 만 발생합니다. 사용자는 삭제되지 않아야합니다. 마이크로 포스트를 삭제하면 콘솔 추적에서 다음과 같이 표시됩니다.
Started DELETE "/microposts/1" for 127.0.0.1 at 2013-07-23 11:35:31 -0400
Processing by MicropostsController#destroy as HTML
Parameters: {"authenticity_token"=>"clfdQ1F/1ewiDnuae9OpVXSZ3S/wtieCrVYNM+Y1838=", "id"=>"1"}
User Load (0.0ms) SELECT "users".* FROM "users" WHERE "users"."remember_token" = 'cUs3NX6FrzU-XnkCbGE4wg' LIMIT 1
Micropost Load (1.0ms) SELECT "microposts".* FROM "microposts" WHERE "microposts"."user_id" = 1 AND "microposts"."id" = 1 ORDER BY microposts.created_at DESC LIMIT 1
(0.0ms) begin transaction
SQL (2.0ms) DELETE FROM "microposts" WHERE "microposts"."id" = ? [["id", 1]]
User Load (0.0ms) SELECT "users".* FROM "users" WHERE "users"."id" = 1 LIMIT 1
SQL (1.0ms) DELETE FROM "users" WHERE "users"."id" = ? [["id", 1]]
(12.0ms) commit transaction
Redirected to http://localhost:3000/
Completed 302 Found in 27ms (ActiveRecord: 16.0ms)
"사용자"의 삭제 이유가 확실하지 않습니다.
내 application.js 파일은 다음과 같습니다 :
내 routes.rb은 다음과 같습니다//= require jquery
//= require jquery_ujs
//= require bootstrap
//= require_tree .
:
SampleApp::Application.routes.draw do
resources :users
resources :sessions, only: [:new, :create, :destroy]
resources :microposts, only: [:create, :destroy]
root :to => 'static_pages#home'
match '/signup', to: 'users#new'
match '/signin', to: 'sessions#new'
match '/signout', to: 'sessions#destroy', via: :delete
match '/help', to: 'static_pages#help'
match '/about', to: 'static_pages#about'
match '/contact', to: 'static_pages#contact'
end
그리고 microposts_controller.rb은 다음과 같습니다
class MicropostsController < ApplicationController
before_filter :signed_in_user, only: [:create, :destroy]
before_filter :correct_user, only: :destroy
def create
@micropost = current_user.microposts.build(params[:micropost])
if @micropost.save
flash[:success] = "Micropost created!"
redirect_to root_path
else
@feed_items = []
render 'static_pages/home'
end
end
def destroy
@micropost.destroy
redirect_back_or root_path
end
private
def correct_user
@micropost = current_user.microposts.find_by_id(params[:id])
redirect_to root_path if @micropost.nil?
end
end
파괴 작업이 구현되는 방법 (위의 튜토리얼에 지정된대로)을 위에서 볼 수 있습니다. 그래서 나는 그 문제가 무엇인지 모른다. 여기
앱/모델/micropost.rbclass Micropost < ActiveRecord::Base
# here we removed :user_id from attr_accessable for security reasons
attr_accessible :content
belongs_to :user, dependent: :destroy
validates :content, presence: true, length: { maximum: 140 }
validates :user_id, presence: true
default_scope order: 'microposts.created_at DESC'
end
이에 어떤 도움을 주셔서 감사합니다.
'app/models/micropost.rb'는 어떻게 생겼습니까? –
이 Marek를 살펴 주셔서 감사합니다. 위의 micropost.rb 코드를 추가했습니다. 종속 : : destroy는 사용자가 삭제되면 사용자에게 속한 모든 마이크로 포스트를 삭제하는 목적을 위해 튜토리얼에서 설명되었습니다. –
@AbeChallah, 사용자에게 속한 모든 마이크로 포스트를 지우고 싶다면'has_many : microposts, dependent : : destroy'처럼'User.rb'에'dependent : : destroy'를 추가해야합니다. – vee