2012-01-27 2 views
0

나는 세 개의 필드 USER_ID와 모델 토큰을 가진 함수를 호출하려고 어떤 방법 오류가 나는 @token 개체를 인스턴스화 컨트롤러 .INunique_token을 PRODUCT_ID없고, PRODUCT_ID 내가 함수 내 내가 임의의 문자열 3 회를 생성하고 국지적 인 문제가 self.tokens.create!(unique_token: Digest::SHA1.hexdigest("random string")) 나에게 어떤 방법 오류 undefined method tokens을 제공하지 않습니다 unique_token 필드에 저장할 객체로 save_with_payment 함수를 호출 form.Then에서 수집 값 뭐야 내가 여기서 잘못하고있는거야? 뭐라구? I 수행하려는 t, 난 또는 User.find(1).tokens 또는 Product.find(1).tokens 국지적 모델 조합과 같은 PRODUCT_ID를 저 USER_ID 연관된 생성 unique_tokens 목록을 검색 할 수 있도록 할 것이 User has_many TokensProduct has_many Tokens이다. 주 : unique_token 필드는 원래 Token 모델에서 가져온 것입니다. user_id 및 product_id는 기본 참조 키입니다. 감사합니다.가 인스턴스화 된 객체

def create 
    @token=Token.new(params[:token]) 
    if @token.save_with_payment 
    redirect_to :controller => "products", :action => "index" 
    else 
    redirect_to :action => "new" 
    end 
end 

class Token < ActiveRecord::Base 
    require 'digest/sha1' 

    def save_with_payment 
# if valid? 
# customer = Stripe::Charge.create(amount:buck,:currency => "usd",card:stripe_card_token,:description => "Charge for bucks") 
#self.stripe_customer_token = customer.id 
    3.times do 
     self.tokens.create!(unique_token: Digest::SHA1.hexdigest("random string")) 
    end 
    save! 
    end 
end 

답변

2

토큰 클래스에는 토큰 메서드가 없습니다. 세 개의 토큰을 만들므로 @token 인스턴스가 필요하지 않습니다. save_with_payment 클래스 메서드가 있어야합니다.

희망이 있습니다.

begin/rescue에서도 루프를 감쌀 수 있습니다. 그렇지 않으면 2 또는 3이 만들어집니다! 당신이 토큰으로 끝나고 "new"로 리다이렉트하지 못한다.

첫 번째 설명에 대한 응답 : 클래스 메서드를 사용하면 작동하지 않습니다. 유효한 전화를 할 수 없습니까? 왜냐하면 당신은 토큰 인스턴스의 컨텍스트에 있지 않기 때문입니다. 나는 인스턴스 메서드를 고수하지 않는 것이 좋습니다. 당신은 클래스 메소드로 변경 할 경우에 당신은 트랜잭션 블록에 포장 할 수 있습니다 : 어떤이 만들 경우

def self.save_with_payment(attributes) 
    transaction do 
    attributes.merge!(unique_token: Digest::SHA1.hexdigest("foo")) 
    3.times do 
     self.create!(attributes) 
    end 
    rescue 
    false 
    end 
end 

는 SQL 트랜잭션을 롤백해야! 호출이 실패하고 컨트롤러 생성 작업에 false를 반환합니다.

저는 토큰 (토큰은 고객 생성/검색에 신경 쓰지 않아야합니다)에서 해당 고객 코드를 가져 와서 컨트롤러 동작에 넣습니다. save_with_payments에 관련 정보를 전달하십시오. 마찬가지로 :

self.save_with_payments(customer, attributes) 
    ... 
end 
+0

이것은 당신이 내가 이전에 추가 할 필요를 느끼지 didnt는 코드를 주석으로 추가 한보다 보면 그것은 일종의 그래서 지금은 정의되지 않은 말한다, 내가 전에했던 코드 intefere 도움이 될 것 같지만 유효한 값은 무엇입니까? 값 buck 및 stripe_card_token도 양식에서옵니다 (Tokens.new (params [; token])). 어떻게 지금 변경합니까? – katie

관련 문제