3

我跟随在条纹上的railscast#288,但我在设置条纹隐藏标记有一些困难。我使用简单形式集成的最新版本的设计。集成条纹与Devise

这是我的注册记忆控制器:

class RegistrationsController < Devise::RegistrationsController 

    def create 
    build_resource 
    if resource.save_with_payment 
     if resource.active_for_authentication? 
     set_flash_message :notice, :signed_up if is_navigational_format? 
     sign_in(resource_name, resource) 
     respond_with resource, :location => after_sign_up_path_for(resource) 
     else 
     set_flash_message :notice, :"signed_up_but_#{resource.inactive_message}" if is_navigational_format? 
     expire_session_data_after_sign_in! 
     respond_with resource, :location => after_inactive_sign_up_path_for(resource) 
     end 
    else 
     clean_up_passwords resource 
     respond_with resource 
    end 
    end 

我的形式注册一个新用户:

<%= simple_form_for(resource, :as => resource_name, :url => registration_path(resource_name), :html => {:class => 'well'}) do |f| %> 
    <%= f.error_notification %> 
    <%= f.error_messages %> 
    <h3 class="center">Create your credentials for logging in:</h3><hr> 
    <div class="inputs"> 
    <%= f.input :email, :required => true %> 
    <%= f.input :password, :required => true %> 
    <%= f.input :password_confirmation, :required => true %> 
    <h3 class="center">Are you a Shipper or a Carrier?</h3><hr> 
    <%= f.input :role, :collection => User::ROLES, :as => :radio_buttons %> 
    <%= f.input :stripe_card_token, :as => :hidden %> 
    </div> 
    <h3 class="center">Your Credit Card Information:</h3><hr> 
    <fieldset> 
    <div class="field"> 
     <%= label_tag :card_number, "Credit Card Number" %> 
     <div class="input-prepend inline-block"> 
     <span class="add-on"><strong>#</strong></span> 
     <%= text_field_tag :card_number, nil, name: nil %> 
    </div> 
    <div class="field"> 
     <%= label_tag :card_code, "Security Code on Back of Card (CVV)" %> 
     <div class="input-prepend inline-block"> 
     <span class="add-on icon-credit-card"></span> 
     <%= text_field_tag :card_code, nil, name: nil, :size => 4 %> 
    </div> 
    <div class="field"> 
     <%= label_tag :card_month, "Card Expiration" %> 
     <%= select_month nil, { add_month_numbers: true }, { name: nil, id: "card_month" } %> 
     <%= select_year nil, { start_year: Date.today.year, end_year: Date.today.year+15 }, 
    { name: nil, id: "card_year" } %> 
    </div> 
    <div id="stripe_error"> 
     <noscript>JavaScript is not enabled and is required for this form. First enable it in your web browser settings.</noscript> 
    </div> 
    </fieldset> 
    <hr> 
    <%= f.input :terms, :as => :boolean, label: "* I have read and agreed to the terms of service" %> 
    <div class="actions"> 
    <%= f.button :submit, "Sign up", class: "btn-large icon-thumbs-up" %> 
    </div> 
<% end %> 

我有一个具有以下属性的用户模型:

attr_accessible :email, :password, :password_confirmation, :remember_me, :role, :terms, :stripe_token, :stripe_card_token 

而且最后咖啡文本得到这一切正常工作:

jQuery -> 
Stripe.setPublishableKey($('meta[name="stripe-key"]').attr('content')) 
subscription.setupForm() 

subscription = 
    setupForm: -> 
    $('#new_user').submit -> 
     $('input[type=submit]').attr('disabled', true) 
     if $('#card_number').length 
      subsciption.processCard() 
      false 
     else 
      true 

processCard: -> 
    card = 
     number: $('#card_number').val() 
     cvc: $('#card_code').val() 
     expMonth: $('#card_month').val() 
     expYear: $('#card_year').val() 
    Stripe.createToken(card, subscription.handleStripeResponse) 

handleStripeResponse: (status, response) -> 
    if status == 200 
     $('#user_stripe_card_token').val(response.id) 
     $('#new_user')[0].submit() 
    else 
     $('#stripe_error').text(response.error.message) 
     $('input[type=submit]').attr('disabled', false) 

当我去创造我的动作控制器是给我下面的错误消息的新用户:

undefined method `stripe_card_token' for #<User:0x00000103fe7b90> 

不过我,因为我在定义该方法不认为这应该是可能的我attr_accessible在我的user.rb模型中调用。任何解释都会非常有帮助,因为我认为我有90%的工作要做。

+0

请添加您的user.rb代码 –

回答

5

除非stripe_card_token是用户表中的字段,否则您需要将其设置为attr_accessor(以及attr_accessible)。

+0

这很有趣,我认为'attr_accessible'也会做'attr_accessor'。你知道为什么不是吗?谢谢 –