diff --git a/app/controllers/subscribes_controller.rb b/app/controllers/subscribes_controller.rb index 3d9042e..5974695 100644 --- a/app/controllers/subscribes_controller.rb +++ b/app/controllers/subscribes_controller.rb @@ -3,24 +3,23 @@ class SubscribesController < ApplicationController def index end - def create - subscribe = Subscribe.find_or_initialize_by(email: params[:email]) - subscribe.enable = true + def new + @subscribe = Subscribe.new + end - if subscribe.save - render :json => { success: true } + def create + @subscribe = Subscribe.find_or_initialize_by(email: subscribe_params[:email]) + @subscribe.enable = true + + if @subscribe.save + redirect_to subscribes_path, notice: '订阅成功' else - render :json => { success: false, message: subscribe.errors.full_messages.join(", ")} + render :new end end - def cancel - subscribe = Subscribe.find_or_initialize_by(email: params[:email]) - subscribe.enable = false - subscribe.save - - flash[:notice] = "退订成功: #{params[:email]}" - render :json => { success: true } + def subscribe_params + params.require(:subscribe).permit(:email) end end diff --git a/app/controllers/unsubscribes_controller.rb b/app/controllers/unsubscribes_controller.rb new file mode 100644 index 0000000..1bf268e --- /dev/null +++ b/app/controllers/unsubscribes_controller.rb @@ -0,0 +1,17 @@ +class UnsubscribesController < ApplicationController + def index + end + + def new + @subscribe = Subscribe.new + end + + def create + subscribe = Subscribe.find_or_initialize_by(email: params[:email]) + subscribe.enable = false + subscribe.save + + flash[:notice] = "退订成功: #{params[:email]}" + redirect_to unsubscribes_path + end +end diff --git a/app/views/blogs/index.html.slim b/app/views/blogs/index.html.slim index c21e900..81ecfc6 100644 --- a/app/views/blogs/index.html.slim +++ b/app/views/blogs/index.html.slim @@ -28,6 +28,9 @@ .row .small-12.medium-6.large-12.columns ul.subscribe-ul + - if ENV['ADMIN_USER'].present? && ENV['ADMIN_USER'].include?('@') + li + = link_to t('subscribes.email'), new_subscribe_path li a data-toggle="qrcode-home" #{t('subscribes.wechat') } #qrcode-home.weixin-subscribe.hide data-toggler='hide' data-url=root_url diff --git a/app/views/subscribes/index.html.slim b/app/views/subscribes/index.html.slim index 1578e35..ed366c9 100644 --- a/app/views/subscribes/index.html.slim +++ b/app/views/subscribes/index.html.slim @@ -1,9 +1,9 @@ .row .large-9.large-centered.columns - h2 退订服务 - hr - form action='' ng-controller='SubscribesController' - .row - .small-12.large-6.columns - = text_field_tag :email, nil, placeholder: 'your@email.com', 'ng-model' => 'email' - button ng-click="cancel()" 退订 + h2 订阅成功, 我们将提供: + + ul + li 第一时间新博客邮件通知 + li 有相关评论 @ 你的时候邮件通知 + + p 你可以随时取消订阅 diff --git a/app/views/subscribes/new.html.slim b/app/views/subscribes/new.html.slim new file mode 100644 index 0000000..c49cf85 --- /dev/null +++ b/app/views/subscribes/new.html.slim @@ -0,0 +1,7 @@ +.row + .small-12.medium-12.large-9.columns + h2 订阅 + + = simple_form_for @subscribe do |f| + = f.input :email + = f.button :submit diff --git a/app/views/unsubscribes/create.html.slim b/app/views/unsubscribes/create.html.slim new file mode 100644 index 0000000..8471bcc --- /dev/null +++ b/app/views/unsubscribes/create.html.slim @@ -0,0 +1,2 @@ +h1 Unsubscribes#create +p Find me in app/views/unsubscribes/create.html.slim diff --git a/app/views/unsubscribes/index.html.slim b/app/views/unsubscribes/index.html.slim new file mode 100644 index 0000000..6557964 --- /dev/null +++ b/app/views/unsubscribes/index.html.slim @@ -0,0 +1,5 @@ +.row + .large-9.large-centered.columns + h4 退订成功 + + p 我们将不再向你发送任何邮件 diff --git a/app/views/unsubscribes/new.html.slim b/app/views/unsubscribes/new.html.slim new file mode 100644 index 0000000..5306e74 --- /dev/null +++ b/app/views/unsubscribes/new.html.slim @@ -0,0 +1,9 @@ +.row + .large-9.large-centered.columns + h2 退订服务 + hr + = simple_form_for @subscribe, url: unsubscribes_path do |f| + .row + .small-12.large-6.columns + = f.input :email, placeholder: 'your@email.com' + = f.submit diff --git a/config/initializers/simple_form.rb b/config/initializers/simple_form.rb index 72f2b8a..bab62ab 100644 --- a/config/initializers/simple_form.rb +++ b/config/initializers/simple_form.rb @@ -6,7 +6,7 @@ SimpleForm.setup do |config| b.use :placeholder b.use :label_input b.use :hint, wrap_with: { tag: :span, class: :hint } - b.use :error, wrap_with: { tag: :span, class: :error } + b.use :error, wrap_with: { tag: :span, class: 'form-error is-visible' } end diff --git a/config/locales/simple_form.zh-CN.yml b/config/locales/simple_form.zh-CN.yml new file mode 100644 index 0000000..c7f34c3 --- /dev/null +++ b/config/locales/simple_form.zh-CN.yml @@ -0,0 +1,31 @@ +en: + simple_form: + "yes": '是' + "no": '否' + required: + text: '必须的' + mark: '*' + # You can uncomment the line below if you need to overwrite the whole required html. + # When using html, text and mark won't be used. + # html: '*' + error_notification: + default_message: "请检查以下问题:" + # Examples + # labels: + # defaults: + # password: 'Password' + # user: + # new: + # email: 'E-mail to sign in.' + # edit: + # email: 'E-mail.' + # hints: + # defaults: + # username: 'User name to sign in.' + # password: 'No special characters, please.' + # include_blanks: + # defaults: + # age: 'Rather not say' + # prompts: + # defaults: + # age: 'Select your age' diff --git a/config/routes.rb b/config/routes.rb index a4632f1..647b6f3 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -14,12 +14,9 @@ WBlog::Application.routes.draw do resources :archives - resources :subscribes do - collection do - post :cancel - end - end - get '/unsubscribe' => 'subscribes#index' + resources :subscribes, only: [:index, :new, :create] + + resources :unsubscribes, only: [:index, :new, :create] # photos resources :photos, only: [:create] get '/qrcodes' => 'qrcodes#show' diff --git a/lib/markdown.rb b/lib/markdown.rb old mode 100755 new mode 100644 diff --git a/spec/controllers/subscribes_controller_spec.rb b/spec/controllers/subscribes_controller_spec.rb index 15037e6..6528f21 100644 --- a/spec/controllers/subscribes_controller_spec.rb +++ b/spec/controllers/subscribes_controller_spec.rb @@ -4,15 +4,13 @@ describe SubscribesController do describe "POST 'create'" do it "post ok" do - post 'create', email: 'tester@test.com' - expect(JSON.parse(response.body)['success']).to be_truthy + post 'create', { subscribe: { email: 'tester@test.com' } } expect(Subscribe.all.size).to eq(1) end it "post with disabled email" do subscribe = Subscribe.create(email: 'tester@test.com', enable: false) - post 'create', email: 'tester@test.com' - expect(JSON.parse(response.body)['success']).to be_truthy + post 'create', { subscribe: { email: 'tester@test.com' } } expect(subscribe.reload.enable).to be_truthy end end