博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用Bootstrap Bar来增加Onboarding Progress Bar功能。
阅读量:4570 次
发布时间:2019-06-08

本文共 2842 字,大约阅读时间需要 9 分钟。

git初始代码

首先,开分支onboardingbar.

然后,

rails g scaffold Team user:references name rails g migration AddTwitterToUsers twitter rails db:migrate

在user.rb上添加

has_many :teams

 

在_navbar.html.erb上添加导航链接:

 

在用户注册app/views/devise/registrations/edit.html.erb上添加twitter field:

<%= f.text_field :twitter, class: 'form-control', placeholder: 'Twitter Username' %>

 

在application_controller.rb上添加参数白名单:

protected    def configure_permitted_parameters      devise_parameter_sanitizer.permit(:sign_up, keys: [:name])      devise_parameter_sanitizer.permit(:account_update, keys: [:name, :twitter])    end

 

添加OnboardingBar:

在app/views/home/index.html.erb

<% if user_signed_in? %>  
<%= current_user.twitter? %> <%= current_user.teams.any? %><% end %>

 

下一步,user.rb添加方法来判断onboardingbar的进度:

def onboarding_percent    steps = [:twitter?, :has_team?]    conplete = steps.select{ |step| send(step)}    complete.length / steps.length.to_f * 100  end  def has_team?    teams.any?  end# select()方法,筛选返回值为true的数组项# Ruby#send()方法,可以使用symbol符号方法 # 方法最后返回的值的计算必须使用浮点格式,不能是整数格式。使用to_f。

 

在views/home/index.html.erb,从bootstrap拷贝下来进度条代码,并修改?:

<% if user_signed_in? %>  
<%= current_user.onboarding_percent %>% <%= current_user.twitter? %> <%= current_user.teams.any? %><% end %>

 

 

这样进度条就可以根据数据库传来的数据显示进度了。

 

下一步是对进度条的说明,即缺哪一项:

  • 在进度条下使用✅,❌图标和说明文字。

使用fontawesome.com的图标,把连接粘贴到<head>内

 在index.html.erb上加上:

  • <%= current_user.onboarding_percent %>%
  • <% if current_user.twitter? %> <% else %> <% end %> Add your Twitter profile
  • <% if current_user.teams.any? %> <% else %> <% end %> Create a team

 

 

重构:

上面的代码可以重构:使用helper

如果:

  • index内的代码太多
  • onboarding功能的代码反复使用 

那么,可以用一个helper方法。

index.html.erb

<% if user_signed_in? %>  Onboarding <%= current_user.onboarding_percent.round%>% Complete  
<%= onboarding_step_icon(current_user.twitter?)%> Add your Twitter profile
<%= onboarding_step_icon(current_user.has_team?)%> Create a team
<% end %>

 

helper方法:

module ApplicationHelper...  def onboarding_step_icon(step_completed)    color = step_completed ? "text-success" : "text-muted"    tag.i class: ['fas', "fa-check", color]  endend # tag.
代替了content_tag(name)的写法

 

 

user.rb中的user类内的实例方法的重构,

如果:

  • 方法非常多,不方便区分。
  • 很多方法只用于某一个功能。

那么,就可以把部分方法放到一个模块内,让User类include这个类。

例如:

module UserOnboarding  extend ActiveSupport::Corcern  def onboarding_percent    steps = [:twitter?, :has_team?]    complete = steps.select{ |step| send(step)}    complete.length / steps.length.to_f * 100  end  def has_team?    teams.any?  endend

 

然后user.rb内include UserOnboarding

 

转载于:https://www.cnblogs.com/chentianwei/p/10690888.html

你可能感兴趣的文章
1.8小结
查看>>
浅谈C#关于AOP编程的学习总结
查看>>
无障碍阅读
查看>>
bzoj1494 生成树计数 (dp+矩阵快速幂)
查看>>
python canvas画移动物体_tkinter – 用于画布对象python的动画移动的方法
查看>>
java 连接 rac_JAVA 连接 ORACLE RAC 字符串
查看>>
java面试题 网络编程_java面试题《三、网络编程》
查看>>
java布尔矩阵程序_Java编程学习摘要(2)语法基础
查看>>
java no wait_即使队列在activemq中不为空,JMS实现中的receiveNoWait也返回null
查看>>
java定义player类_简易扑克牌游戏 定义了Constants、Main、Player、Poker四个类
查看>>
java方法重载例题_Java方法重载实现原理及代码实例
查看>>
java 字符串 包含 次数_用JAVA写查询一个字符串中是否包含另外一个字符串以及出现的次数...
查看>>
java jvm arg_java – Ant,jvmarg,系统属性和引号
查看>>
karp算法Java_Java – 具有Held和Karp算法的旅行推销员
查看>>
Session共享问题---理论
查看>>
Redis键的基本操作
查看>>
redis的安装---Linux
查看>>
Redis过期命令
查看>>
Redis键的序列化和反序列化
查看>>
启动程序添加启动脚本
查看>>