2013-02-13 66 views
0

我想在新用戶註冊時設置簡報註冊過程。我通過長臂猿使用Mailchimp來處理新聞簡報。我已經爲我的模型和getter和setter方法添加了一個訂閱屬性。我也已將訂閱複選框添加到我的表單中。我需要做的是,如果表單框被選中,用戶在創建時訂閱電子郵件。rails設計用戶外部api

模型

class User < ActiveRecord::Base 
    # Include default devise modules. Others available are: 
    # :token_authenticatable, :confirmable, 
    # :lockable, :timeoutable and :omniauthable 
    devise :database_authenticatable, :registerable, 
     :recoverable, :rememberable, :trackable, :validatable 



    # Setup accessible (or protected) attributes for your model 
    attr_accessible :email, :password, :password_confirmation, :remember_me, :username, :subscribe 

    validates :username, presence: true 
    validates_uniqueness_of :username 

    has_many :contest_entries, dependent: :destroy 
    has_many :votes, dependent: :destroy 

    def subscribe=(join) 
    puts "called subscribe with #{join}" 
    if join 
     Gibbon.new.list_subscribe(:id => "blah", :email_address => self.email) 
    end 
    end 

    def subscribe 
    subscribe ||= false 
    end 

end 

表單視圖

<h2>Sign up</h2> 

<%= form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f| %> 
    <%= devise_error_messages! %> 

    <p><%= f.label :username %><br /> 
    <%= f.text_field :username %></p> 

    <div><%= f.label :email %><br /> 
    <%= f.email_field :email %></div> 

    <div><%= f.label :password %><br /> 
    <%= f.password_field :password %></div> 

    <div><%= f.label :password_confirmation %><br /> 
    <%= f.password_field :password_confirmation %></div> 

    <div><%= f.label :subscribe, "Subscribe to Newsletter?" %><br /> 
    <%= f.check_box :subscribe, :checked => true %></div> 

    <div><%= f.submit "Sign up" %></div> 
<% end %> 

<%= render "devise/shared/links" %> 

我希望通過加入attr_accessible和方法,它會調用自動從該位指示的API,但它似乎並沒有被稱爲。

有關如何處理此問題的任何建議?我也可以使用關於如何使用RSPEC進行測試以確保被調用的建議。

感謝, 科裏

回答

0

好吧,我想通了這個問題。問題在於setter方法中的加入檢查。由於這是一個複選框,我需要檢查的1

def subscribe=(join) 
begin 
    if join.to_i == 1 
    gb = Gibbon.new 
    result = gb.list_subscribe(:id => "blah", :email_address => self.email) 
    end 
rescue 
    false 
end 

匹配整數