15 days ago

你有没有后悔过没有抓住人生中的某一刻?你最想修改人生中的哪一刻?

有些时候我们会为生活中已经发生的某些事情感到后悔,后悔到甚至想坐哆啦A梦的时光机回去修改或者重塑。
其实人生每一个时刻的感受都是独一无二的,那些独一无二的它、它们终于构成了我、我们的人生,缺少任意一个,人生的版图都不会完整。纵然不会无怨无悔,至少不负此生。
参加完魔改大赛,这就是我最深刻的感受。



一个留级生的自白与救赎

我是第一期学员,第一期的作业进度始终停留在JobListing第一周。
此时再回去想想6个月前的自己,已经很有些印象模糊了。那时的自己,大概是面目可憎的吧.....

    - 第一次救赎行为始于3月18号参加meetup,获得了鸡血满满和重新开始的勇气…
    - 自3月20重新开始,至6月11,共计84天,投入在全栈营纯时间总长为195小时,约为每天2.3小时…
    - rails101完成练习4次
    - joblisting完成练习3次
    - 参加了招聘网站大赛
    - JDStore完成练习1次
    - 参加了购物网站大赛
    - 学习并实践了16格笔记读书法
    - 学习了markdown排版logdown




魔改大赛心历路程

Joblisting

Joblisting魔改大赛其实很早就完成了可以上线的版本,大概在开赛后2天内。因为不确定,因为不够自信,始终把它压在自己的mac里面,没有参赛...
五一假期间,觉得自己不能够再像第一期那样了,至少证明自己参加过全栈营。
在这种情况下,当然要分析战略,最终决定主要靠主题取胜的方式,再加入一些易做的、教材外的功能。
仔细思考了网站的功能模式和技术结构,明确这是一个提供交流、交互性质的平台网站,它与交易有关,但是没有涉及到交易最核心阶段:物品和货币的交换、结算。
最终确定网站主题是”寻医问药“,患者发布病情信息,医护人员应征,提供一些医疗建议。
最终在5月4号进行了首次发布;5月5号修改了登录界面和footer置地问题;5月7号结束前,又迭代更新了一版,添加了搜索功能。

JDStore

有了Joblisting的大赛经历,在JDStroe时,毫不犹豫的下定决心要参赛。
参赛第一步,当然是要找个队友,在5月13号线下meetup上,顺利的找到队友杜子龙,并一起商量网站的主题、文案、风格、分工等事项。。。
一切仿佛都那么顺利,5月22号开赛,我们就上传了初始版本...
5月25号,进行一次线下meetup,随后,就更新了一个版本,修改了网站的部分bug

事情当然没有那么顺利,5月26号开始,小孩生病住院,自此,我自己就很难抽出整块的时间投入在大赛上面了,队友也因为有自己的事情,没有时间进行版本的迭代...

6月2号开始,事情处理的差不多后,我们又开始了版本的迭代...
4号,8号,10号,11号,共计又发布了4个版本

虽然,我们最后的作品没有达到Tower上预计的成果,但是,我觉得,已经没有遗憾了

终于,我完成了自我救赎.....



魔改大赛技术篇

PS:这里所谓的技术,并不是指编程技术,更偏重于参赛技术。

关于项目管理
    谈到项目管理,可能更多的是一种选择技术或者艺术.
    参赛时,选择什么主题;选择自己的目标;赛程进入紧张时期,选择什么功能进行开发取舍.....
    
    当我在进行Joblisting大赛时,离比赛截止时间已经不多了,当时甚至还需要兼顾到购物网站的学习。
    在这3~4天时间里,面对其他同学缤纷灿烂的作品,如何保持一颗冷静的心,克服焦虑感呢?我的答案是选择合适的功能,合适功能的具体标准是什么?
    1.工作量不是太大,参考信息足够多,可以避免做不出来的挫折感
    2.在购物网站上也可以使用到的功能,这样极大的降低自己的焦虑感,不会觉得会影响到购物网站的学习进度。    
    候选名单上的内容如下,序号表明了优先级:
    1. 小功能:navbar搜索功能
    2. 问题修复:footer固定问题
    3. 问题修复:用户登录、注册失败后,不能进入弹窗模式
    4. 大功能:客服功能
    5. 大功能:首页轮播功能    
    最终,我选择了前3项进行了改版。
    
    在JDStore最后一周的时间内,也遇到类似的情况。这时,我们优先选择美化部分界面,提高作品视觉效果;
    在比赛截止前2天,我们遇到heroku上部分页面显示异常的问题,花了半天时间解bug无果后,我们果断选择版本回溯,放弃了功能迭代....
    完整和稳定的作品才能更称得上是一个产品
    
关于提取练习
    JDStore大赛,最终自己还是上线了两篇自认为不错的教程,而且也帮助自己得到了一些VIP票:
    在这里,我想说的是,对教材进行足够多的提取练习,会自然而然的形成肌肉记忆和思维节点,来迁移到新的功能上。
    举例来说,如果认真练习过Rails101 5次以上的话,应该可以很快联想起来商品收藏功能的做法,非常相似于”用户“与“群组”的关系。
   
对比如下:
    - 有许多不同的User,也有许多不同的Group
    - User可以选择加入任一个或者几个Group
    - Group也可以包含不同的User
    
VS
    - 有许多不同的User,也有许多不同的Product
    - User可以选择收藏任一个或者几个Product
    - Product也可以被不同的User收藏
    
所以,我们完全可以参考 [Rails101 教程7.1~7.5](https://fullstack.xinshengdaxue.com/posts/80) 来实现收藏商品的后台功能,再加上 “按钮的美化” 和“收藏icon” ,就是一个完整的收藏功能了。
另外,参考 [Rails101 教程8](https://fullstack.xinshengdaxue.com/posts/86) 来查看我收藏过的商品

JDStore魔改-对Rails101进行迁移,实现product收藏功能-20170604
JDStore魔改-product搜索功能汇总-20170603

关于组队开发
    我和我的队友,我负责后台,他负责前端美化。
    最终成果是,1 + 1 > 2
    他只需要持续的关注并练习CSS和js,需要后台的地方,留个路径#即可。
    我则关注后台功能开发,针对每个功能的MVC去各个击破
    
    当然,良好协作的前提是熟练并规范的使用Github协作:
    git push 更新本地版本 -> git checkout -b 开分支,进行开发  -> 提交pull request  -> merge 版本 -> 进行测试  -> 推送到heroku,再进行测试
    这样的话,即使遇到重大的bug,至少能保证自己回溯到最新的一个稳定版本。




魔改大赛之后续

大赛虽已完,但是学习全栈之路尚未成功,同学还需努力。

JDStore的练习还未熟练,需要再做提取练习...
新上线的课程,也值得我们继续研习...
极速读书会,也有时间进行实践了...

不管最终做不做全栈工程师,我们都需要明确目标,不忘初心,继续前进...

就像Xdite说的那样,舒适区的概念是不存在的,要不断的找到自己的兴奋点。




最后,一句话进行总结:

后悔药的正确使用方式并不是无条件的自我原谅,而是有措施和改善的自我救赎。

 
24 days ago

实现思路:参考Rails101教程

如果认真练习过Rails101 5次以上的话,应该可以很快联想起来商品收藏功能的做法,非常相似于”用户“与“群组”的关系。

对比如下:
- 有许多不同的User,也有许多不同的Group
- User可以选择加入任一个或者几个Group
- Group也可以包含不同的User
VS
- 有许多不同的User,也有许多不同的Product
- User可以选择收藏任一个或者几个Product
- Product也可以被不同的User收藏

所以,我们完全可以参考 Rails101 教程7.1~7.5 来实现收藏商品的后台功能,再加上 “按钮的美化” 和“收藏icon” ,就是一个完整的收藏功能了。
另外,参考 Rails101 教程8 来查看我收藏过的商品


收藏功能具体实做步骤

Step 1: 建立 ProductRelationship

新建一个model,记录哪个User收藏了哪个Product。
rails g model favorite group_id:integer user_id:integer
执行 rake db:migrate

Step 2: 建立 Product与User之间的收藏关系
app/models/user.rb
.. 略
+    has_many :favorites
+    has_many :favorited_products, :through => :favorites, :source => :product
.. 略

然后修改 app/models/favorite.rb,加入这两行

app/models/favorite.rb
class Favorite < ApplicationRecord
+  belongs_to :user
+  belongs_to :product
end

这样当捞 user.favorited_products 时,就会捞出“收藏的商品”。

修改 app/models/product.rb,加入这两行

.. 略
+  has_many :favorites
+  has_many :favorited_users, :through => :favorites, :source => :user
.. 略
Step 3: 在 user model 内实作判断式“是否收藏”
app/models/user.rb
.. 略
+  def is_like?(product)
+    favorited_products.include?(product)
+  end
.. 略
Step 4: 在 products/show.html.erb 内加入”是否收藏“状态
app/views/products/show.html.erb
<span>
  <% if current_user && current_user.is_like?(@product) %>
    <label class="label label-success"> 收藏商品 </label>
  <% else %>
    <label class="label label-success"> 未收藏商品 </label>
  <% end %>
</span>

Step 5: 在 user model 内实作”收藏商品“及“取消收藏商品”
app/models/user.rb
.. 略
  def like!(product)
    favorited_products << product
  end

  def unlike!(product)
    favorited_products.delete(product)
  end
.. 略
Step 6: 实际操作”收藏商品“及“取消收藏商品”
app/controllers/products_controller.rb
.. 略
 def like
   @product = Product.find(params[:id])
   if !current_user.is_like?(@product)
       current_user.like!(@product)
       flash[:notice] = "收藏商品成功!"
    else
       flash[:warning] = "你已经收藏过本商品了!"
    end
     redirect_to product_path(@product)
 end

 def unlike
   @product = Product.find(params[:id])
   if current_user.is_like?(@product)
       current_user.unlike!(@product)
       flash[:notice] = "取消收藏商品!"
    else
       flash[:warning] = "你没有收藏过商品,如何取消 XD!"
    end
     redirect_to product_path(@product)
 end
.. 略

”收藏商品“及“取消收藏商品”必须要是登入状态下才行。加入下面一行

app/controllers/products_controller.rb
  before_action :authenticate_user! , only: [:like, :unlike]

.. 略
Step 7: 修改routes
config/routes.rb
.. 略
  resources :products do
  
    member do
      post :add_to_cart
+     post :like
+     post :unlike
    end
    
    resources :posts
  end
.. 略
Step 8: 修改”收藏商品“及“取消收藏商品”按钮
app/views/products/show.html.erb
<span>
  <% if current_user && current_user.is_like?(@product) %>
-   <label class="label label-success"> 收藏商品 </label>
+   <%= link_to("取消收藏 ☆ ", unlike_product_path(@product), method: :post, class: "btn btn-default" ) %>
  <% else %>
-   <label class="label label-success"> 未收藏商品 </label>
+   <%= link_to("收藏商品 ❤ ", like_product_path(@product), method: :post, class: "btn btn-default" ) %>
  <% end %>
</span>


下拉菜单,看到我收藏过的商品

Step 1: 产生 account 的 namespace 下的 favorites_controller

执行
rails g controller account/favorites

Step 2. 修改 routing

修改 config/routes.rb 加入:

config/routes.rb
.. 略
  namespace :account do
    resources :orders
+   resources :favorites
  end
.. 略
Step 3. 修改下拉菜单,增加选项

修改 app/views/common/_navbar.html.erb 加入:

app/views/common/_navbar.html.erb
.. 略
   <ul class="dropdown-menu">
     <li> <%= link_to("My orders", account_orders_path ) %></li>
+    <li> <%= link_to("我的收藏", account_favorites_path) %></li>
.. 略
   </ul>
.. 略

为了美化效果,加入收藏icon,可以将上述代码修改为

app/views/common/_navbar.html.erb
<li> 
-  <%= link_to("我的收藏", account_favorites_path) %>
+  <%= link_to account_favorites_path do %> 我的收藏 <i class= "fa fa-heart fa-md"></i>
+  <% end %>
</li>
Step 4.建立 account/favorites_controller.rb 下的 index action
app/controllers/account/favorites_controller.rb
class Account::FavoritesController < ApplicationController
  before_action :authenticate_user!

  def index
    @products = current_user.favorited_products
  end
end

Step 5. 新增 “收藏商品一览页面”

touch app/views/account/favorites/index.html.erb

可以直接使用app/views/products/index.html.erb页面

app/views/account/favorites/index.html.erb
<div class="row">
  <% @products.each do |product| %>
    <div class="col-xs-6 col-md-3">
      <%= link_to product_path(product) do %>
        <% if product.image.present? %>
          <%= image_tag(product.image.thumb.url, class: "thumbnail") %>
        <% else %>
          <%= image_tag("http://placehold.it/200x200&text=No Pic", class: "thumbnail") %>
        <% end %>
      <% end %>
      <%= product.title %> ¥ <%= product.price %>
    </div>
  <% end %>
</div>

也可以使用app/views/admin/products/index.html.erb页面

app/views/account/favorites/index.html.erb
<div class="row">
    <div class="col-md-10">
        <h2>我收藏的商品</h2>
        <table class="table table-bordered">
            <thead>
                <tr>
                    <th>#</th>
                    <th width="220">Product Pic</th>
                    <th>Name</th>
                    <th>Price</th>
                </tr>
            </thead>
            <tbody>
              <% @products.each do |product| %>
                <tr>
                  <td> <%= product.id %> </td>
                  <td> <%= link_to product_path(product) do %>
                       <% if product.image.present? %>
                         <%= image_tag(product.image.thumb.url, class: "thumbnail") %>
                       <% else %>
                         <%= image_tag("http://placehold.it/200x200&text=No Pic", class: "thumbnail") %>
                        <% end %>
                       <% end %>
                   </td>
                   <td> <%= product.title %> </td>
                   <td> <%= product.price %> </td>
                 </tr>
                <% end %>
            </tbody>
        </table>
    </div>
</div>





至此,收藏功能已经完成。
文末,分享一点小技巧。
在实做收藏功能时,首先,我确认参考Rails01的思路是对的,但是在具体实做过程中,要按照教程进行实际操作,同时需要考虑到model、method名称的改变,一不小心,很容易出错。如何解决呢? 我用纸笔直接画出来。

1.按原教程在纸上用蓝色笔写出 User 、Group 、及相关的method。
2.每实做一步,在蓝色字体旁边,标注实做的 medle及method名称。
3.这样,就很容易按步骤进行,而不会遗漏或者弄错名称。

当然,如果你对教程中的内容和前后步骤已经相当熟悉了,自然不需要这种土办法了。



你好,如果觉得这篇文章对你有帮助,我最近在参加一个编程比赛,JD-Store 魔改大赛,喜欢的话还麻烦你投下宝贵的一票,谢谢。

 
24 days ago

搜索功能,目前主要有两种方式:

  1. 做在navbar上

  2. 做在Products#index,或者Product#show 页面内




方案1:navbar实现搜索功能

Step1.安装gem

在Gemfile中加入如下gem:
gem ‘ransack’
gem ‘will_paginate’
gem 'will_paginate-bootstrap'
gem ‘seo_helper’

备注:
gem 'will_paginate-bootstrap'用来美化分页效果的。
gem ‘seo_helper’用于高亮显示搜索结果
执行:bundle install

执行完毕后,重新开启rails server。

Step2.在_navbar.html.erb中的某个位置添加代码如下代码:

app/views/common/_navbar.html.erb
<div class="nav navbar-nav navbar-left">
  <%= form_tag "#" , :method => :get do %>
     <div class="input-group" id="search-id" >
        <input type="text" class="form-control" name="q" value="<%= params[:q] %>" placeholder="寻找宝贝">
          <div class="input-group-btn">
             <button class="btn btn-default" type="submit">
                <i class="glyphicon glyphicon-search"></i>
             </button>
          </div>
      </div>
   <% end %>
</div>

备注:CSS格式可以自己调节。

Step3.在products_controller.rb中添加相关功能方法

app/controllers/products_controller.rb
略...

 before_action :validate_search_key, only: [:search]
 
略...

 def search
   if @query_string.present?
      search_result = Product.ransack(@search_criteria).result(:distinct => true)
      @products = search_result.paginate(:page => params[:page], :per_page => 5 )
    end
 end

 protected

   def validate_search_key
     @query_string = params[:q].gsub(/\\|\'|\/|\?/, "") if params[:q].present?
     @search_criteria = search_criteria(@query_string)
   end

   def search_criteria(query_string)
     { title_or_description_cont: query_string }
   end

备注:title_or_description_cont,表示搜索内容限于product的title和description,也可以加入product的其他栏位。

Step4.修改routing,加入search

config/routes.rb
  resources :products do
 +   collection do
 +     get :search
 +   end
  end

执行:rake routes

Step5: 新建搜索结果显示页面

touch app/views/products/search.html.erb

app/views/products/search.html.erb
<div class="product-box">
  <div class="container">
    <!--=== 搜索结果,没有符合条件的数据 ===-->
    <% if @query_string.blank? %>
      <h2 class="search-info-title">搜索信息不能为空,请输入关键字搜索</h2>
    <% elsif @products.blank?%>
      <br>
        <h2 class="search-info-title">亲,没有搜索到商品哦,要不换个关键词试试?</h2>
    <% else %>
    <!--=== 搜索结果,有符合条件的数据 ===-->
    <!--=== 搜索內容 ===-->
    <div class='row'>
       <% @products.each do |product| %>
         <div class='col-xs-12 col-sm-4 col-md-3 product-content'>
           <%= link_to product_path(product) do %>
           <!-- 商品圖片 -->
             <% if product.image.present? %>
             <!-- 顯示圖片 -->
               <%= image_tag(product.image.thumb.url, class: "thumbnail img-responsive") %>
             <% else %>
                <%= image_tag("http://placehold.it/400x400&text=No Pic", class: "thumbnail") %>
             <% end %>
           <% end %>
           <div class="product-info">
            <p><%= link_to(render_highlight_content(product,@query_string), product_path(product)) %></p>
            <p>$ <%= product.price %></p>
           </div>
         </div>
         <% end %>
       </div>
       <div class="page-box">
         <%= will_paginate @products, renderer: BootstrapPagination::Rails, :previous_label => t('previous-label'), :next_label => t('next-label') %>
       </div>
    <% end %>
  </div>
</div>

备注:里面的search-info-title等css要自己去定义。


Step 6: 修改Step2 中 navbar内容,添加search路径

app/views/common/_navbar.html.erb
-   <%= form_tag "#" , :method => :get do %>
+   <%= form_tag search_products_path , :method => :get do %>


Step 7: 实现搜索highlight功能

在 app/helpers/products_helper.rb里添加如下代码

app/helpers/products_helper.rb
def render_highlight_content(product,query_string)
    excerpt_cont = excerpt(product.title, query_string, radius: 500)
    highlight(excerpt_cont, query_string)
end

接着把 app/views/products/search.html.erb中的如下代码做修改:

app/views/products/search.html.erb
-   <%= link_to(product.title, product_path(product)) %>
+   <%= link_to(render_highlight_content(product,@query_string), product_path(product)) %>




方案2:Products#index 或 Product#show 页面内实现搜索

Step1.安装gem

在Gemfile中加入如下gem:
gem ‘ransack’
gem ‘will_paginate’
gem 'will_paginate-bootstrap'
gem ‘seo_helper’

备注:
gem 'will_paginate-bootstrap'用来美化分页效果的。
gem ‘seo_helper’用于高亮显示搜索结果
执行:bundle install

执行完毕后,重新开启rails server。

Step2.修改 views/products/index.html.erb,在适当的位置,加入如下代码

app/views/products/index.html.erb
略
<%= render :partial => "products/search_bar" %>
略

备注:此行代码也可加入到views/products/show.html.erb,根据自己的需求。

Step3. 新建一个search_bar

touch app/views/products/_search_bar.html.erb,加入如下代码

app/views/products/_search_bar.html.erb
<div class="row">
    <div class="col-sm-9 col-lg-8 col-lg-offset-2">
        <%= form_tag "#" , :method => :get do %>
            <div class="input-group">
                <input type="text" class="form-control" name="q" value="<%= params[:q] %>" placeholder="寻找宝贝...">
                <div class="input-group-btn">
                    <button class="btn btn-default" type="submit"><i class="glyphicon glyphicon-search"></i></button>
                </div>
            </div>
        <% end %>
    </div>
</div>


Step4. 在products_controller.rb中添加相关功能方法

app/controllers/products_controller.rb
略...

 before_action :validate_search_key, only: [:search]
 
略...

 def search
   if @query_string.present?
      search_result = Product.ransack(@search_criteria).result(:distinct => true)
      @products = search_result.paginate(:page => params[:page], :per_page => 5 )
    end
 end

 protected

   def validate_search_key
     @query_string = params[:q].gsub(/\\|\'|\/|\?/, "") if params[:q].present?
     @search_criteria = search_criteria(@query_string)
   end

   def search_criteria(query_string)
     { title_or_description_cont: query_string }
   end

备注:title_or_description_cont,表示搜索内容限于product的title和description,也可以加入product的其他栏位。

Step5.修改routing,加入search

config/routes.rb
  resources :products do
 +   collection do
 +     get :search
 +   end
  end

执行:rake routes

Step6: 新建搜索结果显示页面

touch app/views/products/search.html.erb

app/views/products/search.html.erb
<div class="product-box">
  <div class="container">
    <!--=== 搜索结果,没有符合条件的数据 ===-->
    <% if @query_string.blank? %>
      <h2 class="search-info-title">搜索信息不能为空,请输入关键字搜索</h2>
    <% elsif @products.blank?%>
      <br>
        <h2 class="search-info-title">亲,没有搜索到商品哦,要不换个关键词试试?</h2>
    <% else %>
    <!--=== 搜索结果,有符合条件的数据 ===-->
    <!--=== 搜索內容 ===-->
    <div class='row'>
       <% @products.each do |product| %>
         <div class='col-xs-12 col-sm-4 col-md-3 product-content'>
           <%= link_to product_path(product) do %>
           <!-- 商品圖片 -->
             <% if product.image.present? %>
             <!-- 顯示圖片 -->
               <%= image_tag(product.image.thumb.url, class: "thumbnail img-responsive") %>
             <% else %>
                <%= image_tag("http://placehold.it/400x400&text=No Pic", class: "thumbnail") %>
             <% end %>
           <% end %>
           <div class="product-info">
            <p><%= link_to(render_highlight_content(product,@query_string), product_path(product)) %></p>
            <p>$ <%= product.price %></p>
           </div>
         </div>
         <% end %>
       </div>
       <div class="page-box">
         <%= will_paginate @products, renderer: BootstrapPagination::Rails, :previous_label => t('previous-label'), :next_label => t('next-label') %>
       </div>
    <% end %>
  </div>
</div>

备注:里面的search-info-title等css要自己去定义。

Step 7: 修改Step3 中的代码,添加search路径

app/views/products/_search_bar.html.erb
-   <%= form_tag "#" , :method => :get do %>
+   <%= form_tag search_products_path , :method => :get do %>


Step 8: 实现搜索highlight功能

在 app/helpers/products_helper.rb里添加如下代码

app/helpers/products_helper.rb
def render_highlight_content(product,query_string)
    excerpt_cont = excerpt(product.title, query_string, radius: 500)
    highlight(excerpt_cont, query_string)
end

接着把 app/views/products/search.html.erb中的如下代码做修改:

app/views/products/search.html.erb
-   <%= link_to(product.title, product_path(product)) %>
+   <%= link_to(render_highlight_content(product,@query_string), product_path(product)) %>




你好,如果觉得这篇文章对你有帮助,我最近在参加一个编程比赛,JD-Store 魔改大赛,喜欢的话还麻烦你投下宝贵的一票,谢谢。


参考:
http://linzhewei-blog.logdown.com/posts/796801
https://forum.qzy.camp/t/navbar/486

 
27 days ago

今天是儿童节,首先祝我的木木节日快乐,身体健康,尽快恢复健康,回到活蹦乱跳的状态。

Objective 关于今天的课程, 你记得什么? 完成了什么?

1. github上合并了版本,完成了七牛云的相关章节操作
2. 整理了目前的状态:全栈营的学习,PME的工作,近期的账单记录

Reflective 你要如何形容今天的情绪; 今天的高峰是什么? 今天的低点是什么?

1. 感觉的到木木的健康恢复,比较高兴。
2. 认识到自己的一些问题,需要记录、分析、思考和解决,不要再做行动上的矮子了。

Interpretive 我们今天学到了什么? 今天一个重要的领悟是什么?

1. 脑袋比较浆糊,回忆不起来了。 


解决问题方法论: 意识到有问题->认识问题->分析问题->解决问题的方法->解决问题的过程:挣扎、反思->解决了问题->形成肌肉记忆->总结,归档

Decisional 我们会如何用一句话形容今天的工作; 有哪些工作需要明天继续努力?

JDstore需要更新一个版本了。

 
about 1 month ago

BUG 1. String can't be coerced into Fixnum

app/views/order_mailer/notify_order_placed.html.erb
    <% @product_lists.each do |product_list| %>
      <tr>
        <td>
          <%= product_list.product_name %>
        </td>
        <td>
          <%= product_list.product_price %>
        </td>
        <td>
          <%= product_list.quantity %>
        </td>
        <td>
          <%= product_list.quantity * product_list.product_price %>
        </td>
      </tr>
    <% end %>

问题定位

  1. <%= product_list.quantity * product_list.product_price %>注释掉之后,错误不在出现。因此定位于 Model :product_list
  2. 经过反复查看,发现 product_list中product_price定义为string属性,应该是integer属性。

解决方案:修改db文件,再做rake三兄弟。


BUG 2.


问题定位:each未定义,可能是index文件写的有问题,不应该是each本身的问题。


BUG 3.


地址错误,少写了一个s,应该是admin/orders


BUG 4



问题查找和定位:发现点击“申请取消订单”按钮前和后,浏览器order一个是id,一个是随机数,可能会和token有关。

 
about 1 month ago

Objective

关于今天的课程, 你记得什么? 完成了什么?

  1. JDStore 完成ch8、ch9、ch10、ch11 --约6小时


Reflective

你要如何形容今天的情绪; 今天的高峰是什么? 今天的低点是什么?

happy,尤其所有的bug都解决了。


Interpretive

我们今天学到了什么? 今天一个重要的领悟是什么?

  1. 状态机 gem ‘aasm’ 及相关的操作


Decisional

我们会如何用一句话形容今天的工作; 有哪些工作需要明天继续努力?

  1. JDstore的复盘 5-8 本章学习以及复盘指南,作业完成
  2. 对魔改大赛需要做的内容进行梳理,上tower进行管理
  3. 视频回放学习
  4. CSS实验
  5. 本周周记+5.19报错记录
 
about 2 months ago

Objective

  • 完成魔改大赛的心得
  • markdown相关学习
  • 直播回放:0511-JD Stroe 魔改大赛的准备

  • 拆解你的目标
    • 拆解目标,将最终目标A拆成立体的目标B
  • 找到路径和节奏:如何从A(最终目标)到B(明确的分解目标)
  • 一个人没办法做完所有的事,所以,你需要学会协作

  • 主题
    • 如何挑选主题?
      • 实力中等,做【主题商店】
      • 很有实力,做【服务贩售下单】

  • 架构
    • 如何不掉坑?(功能)
      • 先写UserStory,手写
      • 人物不能超过2个(Admin + User)
      • 先排Must Have / Should Have
      • Must Have + Should Have 不能超过十个
    • 如何不掉坑?(画面)
      • 先用【手稿】打画面
      • 主线不能超过10张画面
      • (登入/登出/静态页面/主要购买流程/个人账户设定/个人订单)
    • 实做
      • 主程:决定主题,安排事务
      • 副程:辅助解决细项修饰
      • 后端/前端。或 开发/美术

  • 找队友
    • 同城,属性互补
    • 上线时间,协作时间

  • 协作
    • 重视自己的承诺
    • 只鼓励,帮助对方做得更好(不管对方是否是猪队友)
    • 不给对方制造麻烦(写code加注释,CSS命名清晰)
    • Tower / Pull Request

  • 如何拉票?
    • 20名VIP(可以获奖)
    • 写教程,MeetUp帮助别人
    • 帮忙别组写功能

  • 如何增加票数?
    • 迭代功能
    • 迭代画面,避免审美疲劳
    • 去留言鼓励别人
    • 产生社交

总结:

  • 拆切你的目标
  • 找到步骤与节奏
  • 找到问题与解法
  • 不停的迭代

QA:现阶段如何提升自己的前端能力?:抄抄抄+改改改

 
about 2 months ago

你后悔没有抓住人生中的哪一刻?你最想修改人生中的哪一刻?

有些时候我们会为生活中已经发生的某些事情感到后悔,后悔到甚至想坐哆啦A梦的时光机回去修改或者重塑。
其实人生每一个时刻的感受都是独一无二的,那些独一无二的它、它们终于构成了我、我们的人生,缺少任意一个,人生的版图都不会完整。纵然不会无怨无悔,至少不负此生。
参加完魔改大赛,这就是我最深刻的感受。


一个留级生的自我救赎

我是第一期学员,第一期的作业进度始终停留在JobListing第一周。
此时想想2~3个月前的自己,已经很有些印象模糊了。那时的自己,肯定是面目可憎的,原因大家都懂的。哦漏~

    - 第一次救赎行为始于3月18号参加meetup,获得了鸡血满满和重新开始的勇气…
    - 自3月20重新开始,至5月11,共计53天,投入在全栈营纯时间总长为117小时,约为每天2.2小时…
    - rails101完成练习4次
    - joblisting完成练习3次


魔改大赛心历路程

魔改大赛其实很早就完成了可以上线的版本,大概在4月24左右吧。因为不确定,因为不够自信,始终把它压在自己的mac里面,不见天日。
五一假期间,觉得自己不能够再像第一期那样了,至少证明自己参加过全栈营。于是在这种情况下,仔细思考并确定当前情况下的最合适的方式:主题取胜。终于在5月4号进行了首次发布。


魔改大赛技术篇

PS:这里所谓的技术,并不是指编程技术,更偏重于选择技术。

主题取胜
    关于主题,我还是深入思考过的。招聘网站的功能和技术结构,决定了这是一个提供交流、交互性质的平台网站,它与交易有关,但是没有涉及到交易最核心阶段:物品和货币的交换、结算。
    对网站进行流程抽象归纳:首先,得有需求存在(职位需求)- 这些需求被公布(发布职位需求)- 有人响应(应聘)。交互的过程就发生在我们要做的平台上。
    最开始的想法是做儿童绘本相关的,也就是一个类似豆瓣的读书评论。后来觉得缺少了应征的环节,所以绘本的主题还是打算留在购物网站实现。
    最终确定在医疗行业,提供一个医护和患者交流的平台:患者发布病症描述,医护人员应征。
    OK,就是它了。
项目管理
    作品的最终上线时间是5月4号,这个时候,离结束时间已经不多了,甚至还需要兼顾到购物网站的学习。那就是说,最多我也只能更新迭代2~3个小功能了。此时优秀参赛作品已经很多了,很多功能值得去Command+c,移植到自己的作品上(什么意思?我想大家都懂的XDD)。
    在这3~4天时间里,面对其他同学缤纷灿烂的作品,如何保持一颗冷静的心,克服焦虑感呢?我的答案是选择合适的功能,合适功能的具体标准是什么?
    1.工作量不是太大,参考信息足够多,可以避免做不出来的挫折感
    2.在购物网站上也可以使用到的功能,这样极大的降低自己的焦虑感,不会觉得会影响到购物网站的学习进度。
    
    候选名单上的内容如下,序号表明了优先级:
    1. 小功能:navbar搜索功能
    2. 问题修复:footer固定问题
    3. 问题修复:用户登录、注册失败后,不能进入弹窗模式
    4. 大功能:客服功能
    5.大功能:首页轮播功能
    
    最终,我选择了前3项进行了改版。


最后,一句话总结:

后悔药的正确使用方式并不是无条件的自我原谅,而是有措施和改善的自我救赎。

 
about 2 months ago

Objective

关于今天的课程, 你记得什么? 完成了什么?

  1. 招聘网站:修改弹窗错误问题。参考https://forum.qzy.camp/t/topic/1346 —1’57“
  2. Rails学习:—1’16“
  3. 吉米王的blog学习:simple_form;
  4. bootstrap学习,无效果
    3.PME工作 :—0’28“ 确认电子锁立项事宜。

Reflective

你要如何形容今天的情绪; 今天的高峰是什么? 今天的低点是什么?

  1. 充实

Interpretive

我们今天学到了什么? 今天一个重要的领悟是什么?

  1. 直播回放:

Decisional

我们会如何用一句话形容今天的工作; 有哪些工作需要明天继续努力?

  1. job-listing还需要继续做练习并提取练习。
  2. 购物网站-需要再练习一次。 3.job-listing弹窗问题,也许可以参考如下解决。 https://github.com/dchen71/dchen71.github.io/blob/master/_posts/2015-11-14-devise-bootstrap-modal.md
 
about 2 months ago

Objective

关于今天的课程, 你记得什么? 完成了什么?

  1. JdStore:完成5-3到5-7的内容 —4’18“
  2. 更新了JdStore主题:参考吉米王的blog:http://xbearx1987-blog.logdown.com/posts/1735049-website-wellhttps://bootsnipp.com/。在网站直接下载


Reflective

你要如何形容今天的情绪; 今天的高峰是什么? 今天的低点是什么?

  1. 平缓


Interpretive

我们今天学到了什么? 今天一个重要的领悟是什么?

  1. 几次报错都自己解决了,没有求助。特别是“rake db:migrate报错”+“rails console返回值错误”


Decisional

我们会如何用一句话形容今天的工作; 有哪些工作需要明天继续努力?

  1. JdStroe的,5-4,还是不太清楚,“实现原理”或者说“哪个输入参数,经过什么操作,导致了哪个输出参数”
  2. 队友没有找到,决定到四海群去找下。