0

新しいユーザーがサインアップするときに、ニュースレターのサインアップ手順をセットアップしようとしています。ニュースレターを処理するためにギボン経由で Mailchimp を使用しています。モデルに subscribe 属性と getter および setter メソッドを追加しました。また、フォームに購読チェックボックスを追加しました。私がする必要があるのは、フォームボックスがチェックされている場合、作成時にユーザーを電子メールに登録することです。

モデル

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 が呼び出されていることを確認するために RSPEC でテストする方法についてのアドバイスも利用できます。

ありがとう、コーリー

4

1 に答える 1

0

OK、私は問題を理解しました。問題は、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

終わり

于 2013-02-14T00:03:00.867 に答える