2014-02-12 6 views
3

초보자로서 나는 사용자 ID를 Line_Items 테이블로 가져올 수 있었기 때문에 현재 사용자 세션 ID를 다른 테이블에 저장하는 것이 쉬울 것이라고 생각했다. 나는 내 키가 다른 테이블에 하나의 프라이 머리 키를 저장하는 기본 원칙을 이해하지 못했다고 생각한다. 나의 키가 카트 User_ID를 Carts 테이블에 저장하려고하는 외래 키는 카트에 속하고 카트에는 많은 카트가있다. 이 질문과 관련된 모든 코드 또는 유용한 링크는 크게 감사하겠습니다. 다음은 내 모델입니다. 도움이 필요한 다른 코드가 있으면 알려주십시오. 감사합니다 :루비 레일에 외래 키로 다른 테이블에 사용자 ID를 저장하는 기본 규칙

class User < ActiveRecord::Base 
attr_accessible :email, :first_name, :last_name, :password, :role, :subscriber, :name 


has_many :line_item 
has_many :cart 


class NotAuthorized < StandardError; end 
end 

Cart.rb :

class Cart < ActiveRecord::Base 
attr_accessible :user_id 

has_many :line_items, dependent: :destroy 
belongs_to :user 

def add_phone(phone, current_user = nil) 

    current_item = line_items.find_or_initialize_by_phone_id(phone.id) 

    current_item.increment!(:quantity) 
    current_item.phone.decrement!(:stock) 
    current_item.user = current_user 
    current_item.phone.save 
    current_item 
end 

# returns true if stock level is greater than zero 
def can_add(phone) 
    phone.stock > 0 
end 

# returns the total number of items in a cart 
def number_of_items 
    total = 0 
    line_items.each do |item| 
     total += item.quantity 
    end 
    total 
end 

def empty? 
    number_of_items == 0 
end 

def grand_total 
    grand_total = 0 
    line_items.each do |item| 
     grand_total += item.quantity * item.phone.price 
    end 
    grand_total 
end 

end 
+1

어떤 오류가 발생 했습니까? –

+1

오류가 발생하지 않습니다. 실제로 레일에서 루비의 외래 키로 기본 키를 다른 테이블에 가져 오는 방법을 전혀 모릅니다. –

답변

1

당신은 당신의 관계 선언에 오류가 .. 그들이 복수해야한다, 그것을 시도하고보고 도움이된다면, 또한 당신은에 USER_ID을 가져야한다 당신의 수레는 & 광고 항목 모델.

has_many :line_items 
has_many :carts 
+1

고마워.하지만 분명히 나는 ​​카트 테이블에 현재 세션 ID를 추가 할 코드가 없다. 그것이 내가 도움이 필요한 것입니다. 당신이 저를 도울 수 있거나 매우 도움이되고 감사하게 될 관련 링크를 주실 수 있다면. –

+1

기본적으로 시도해 봐야 할 것은 before_filter 작업을 컨트롤러 일부에서 설정하는 것입니다. 그러면 before_filter 작업에서 장바구니를 설정하고 장바구니 ID를 세션에 저장할 수 있습니다. 고객에게 장바구니 ID를 제공하여 세션에 연결).사용자가 다시 컨트롤러를 방문 할 때마다 세션에서 해당 카트 ID를 찾고 그 ID를 사용하여 장바구니를로드하면됩니다. Content (serializable 해시 어쩌면?), user_id 정수 및 필요한 다른 필드와 같은 몇 가지 기본 항목으로 장바구니 모델을 만들어야합니다. – DevDude

+1

내 장바구니가 실제로 잘 작동하고 제품이 추가됩니다. 을 line_item 테이블에 추가하고 뷰에 표시하면 총계를 표시하기 위해 카운트하고 곱합니다. 당신이 당신의 코멘트를 편집하고 나에게 많은 도움이 될 타이핑 된 예제를 줄 수 있다면 좋을 것입니다. 내가 도와야하는 다른 코드가 필요하다면, 그것을 내 포스트에서 업데이트 할 수 있습니다. 다시 고마워요 :) –

1

모델 라인 항목장바구니 모델 또한

has_many :line_items 
has_many :carts 

사용자, 당신은 말할 수

belongs_to :user 

우리는 사용하여 언급 할 수 foreign_key를로 잘 주어진 :

belongs_to :user, foreign_key: "user_id" 

세션 ID를 얻기 위해 또는

를 들어 장바구니 컨트롤러 또는 광고 항목 컨트롤러에 레코드를 저장하기 위해 .. 당신을 위해 도움이 될 것입니다

희망 LineItem을

#In create action 
@line_item = current_user.line_items.build(params[:user]) 
# or 
@line_item.user = current_user 

장바구니 용

당신은 단순히 당신이뿐만
session['session_id'] 

아래에 감사를 사용할 수있는 컨트롤러 나 세션 ID에 대한 전망에서 current_user.id

하여 얻을 수 line_items and cart 관련 찾기위한 컨트롤러에 user id를 얻기 위해

.

+1

위대한 소리는하지만 카트 컨트롤러 및 모델에 대한 세션 사용자 ID를 카트 테이블에 넣으려면 어떻게해야합니까? 이미 잘 작동하는 current_user 메소드가 있습니다. 해당 세션 ID를 카트 테이블에 저장하려면 어떻게해야합니까? 미리 감사드립니다. –

+1

답변 감사합니다. .. thanks. –

+1

추가 도움을 주셔서 대단히 감사드립니다. 내 응용 프로그램은 정말 이상합니다. 제공 한 코드가 카트 ID에 사용자 ID를 저장하지 않습니다. 내가 말한 Wierd는 카트 컨트롤러에서 생성 액션을 삭제할 때 테이블에 레코드를 생성한다는 것입니다. 모델 및 품목 모델 또는 컨트롤러에 대한 전체 코드를보고 싶습니까? –