<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>xiaohesong (哎呦)</title>
    <link>https://ruby-china.org/xiaohesong</link>
    <description></description>
    <language>en-us</language>
    <item>
      <title>[杭州] 有赞科技诚聘高级测试工程师&amp;java&amp;前端</title>
      <description>&lt;h2 id="关于有赞"&gt;关于有赞&lt;/h2&gt;
&lt;p&gt;有赞，是一个商家服务公司。&lt;/p&gt;

&lt;p&gt;我们帮助每一位重视产品和服务的商家私有化顾客资产、拓展互联网客群、提高经营效率，全面助力商家成功。&lt;/p&gt;

&lt;p&gt;我们致力于成为商家服务领域里最被信任的引领者；
并持续作一个 Enjoy 的组织。&lt;/p&gt;

&lt;p&gt;&lt;img src="https://img.bosszhipin.com/beijin/upload/com/img/20191231/908e6c5a3a430f795e45fff8601a8147111e7725cf2a7e0f92b8e55bb5203e7a.jpg?x-oss-process=image/watermark,size_18,t_50,color_FFFFFF,text_QOacrOWbvueUseivpeWFrOWPuOazqOWGjOeUqOaIt-S4iuS8oA==,type_ZHJvaWRzYW5zZmFsbGJhY2s&amp;amp;x-oss-process=image/resize,w_300,limit_0" title="" alt="https://img.bosszhipin.com/beijin/upload/com/img/20191231/908e6c5a3a430f795e45fff8601a8147111e7725cf2a7e0f92b8e55bb5203e7a.jpg?x-oss-process=image/watermark,size_18,t_50,color_FFFFFF,text_QOacrOWbvueUseivpeWFrOWPuOazqOWGjOeUqOaIt-S4iuS8oA==,type_ZHJvaWRzYW5zZmFsbGJhY2s&amp;amp;x-oss-process=image/resize,w_300,limit_0"&gt;&lt;/p&gt;
&lt;h2 id="公司福利"&gt;公司福利&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;追求 geek 文化的技术导向团队，扁平管理，你的薪资由实力做主。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;参加技术会议培训的机会，公司报销；&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;工作电脑 MacBook Pro&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;试用期薪资和正式时一样；&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;部门团建，outing&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;每年 14 个月薪资&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;绩效平均水平能拿到 2-5 个月薪资作为年终奖金；&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;每周下午茶&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;人体工学座椅&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;活动室，健身房（锻炼完洗个澡，酸爽）&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="招聘信息"&gt;招聘信息&lt;/h2&gt;&lt;h3 id="高级测试工程师（20k～30k）"&gt;高级测试工程师（20k～30k）&lt;/h3&gt;&lt;h5 id="工作职责："&gt;工作职责：&lt;/h5&gt;
&lt;p&gt;负责有赞商业赋能相关项目具体测试工作、自动化建设、合并发布流程管控、设计开发线上业务级别可用性监控、同时在研发提升测试效率的工具。&lt;/p&gt;
&lt;h5 id="工作内容："&gt;工作内容：&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;分析业务领域，设计和实现与之对应的测试系统&lt;/li&gt;
&lt;li&gt;服务业务系统质量，编码测试用例和工具，使其他工程师能够测试和评估自己的代码质量&lt;/li&gt;
&lt;li&gt;运维测试环境，帮助其他工程师迅速 debug 和解决环境问题&lt;/li&gt;
&lt;li&gt;领导和组织资源，完成高强度的测试项目&lt;/li&gt;
&lt;li&gt;参与分享和培训，提高工程师们的质量意识、建立广泛的质量影响力&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id="职位要求："&gt;职位要求：&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;计算机相关专业本科以上学历，5 年以上软件测试开发经验&lt;/li&gt;
&lt;li&gt;具有扎实的软件测试理论基础和软件工程基础，掌握持续集成思想&lt;/li&gt;
&lt;li&gt;熟练掌握 Java、Python 任意一门编程语言，熟悉 Spring 等常用开发框架&lt;/li&gt;
&lt;li&gt;熟悉常用的测试框架和工具，熟悉常用的 Linux 命令，熟练掌握 MySQL 相关知识&lt;/li&gt;
&lt;li&gt;熟练掌握性能测试或自动化测试，具备服务端测试、WEB 测试任一相关经验&lt;/li&gt;
&lt;li&gt;有较强的逻辑思维能力与沟通协作能力，并具有一定的项目推动能力&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="Java 开发工程师（15k～25k）"&gt;Java 开发工程师（15k～25k）&lt;/h3&gt;&lt;h5 id="工作职责："&gt;工作职责：&lt;/h5&gt;
&lt;p&gt;参与商业赋能各核心系统（包含商业化、销售体系、服务体系、HR 体系、项目管理体系）的架构设计和开发工作，打通有赞各系统的数据孤岛，满足不同复杂业务场景下的产品需求；&lt;/p&gt;
&lt;h5 id="工作内容："&gt;工作内容：&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;独立负责单点技术的设计与实施，并完成基础核心系统研发工作；&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;参与业务规则梳理，与产品经理、业务方一起设计并讨论业务场景实现；&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;对现有系统的不足进行分析，找到目前系统的瓶颈，进行重构优化和改进，提高系统性能；&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;参与重点项目的设计方案支持与评审，难点攻关。&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id="任职条件："&gt;任职条件：&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;2 年及以上 Java 开发经验，至少深入研究过一种开源技术框架；&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;扎实的 Java 基础知识，理解 IO、多线程、集合等基础框架，对 JVM 原理有一定的了解；&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;熟悉分布式系统的设计和应用，了解分布式、缓存、消息等机制，能合理应用分布式技术解决问题；&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;熟练掌握 Redis、MongoDB、NSQ、Kafka 等中间件；&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;有较强的逻辑思维能力与沟通协作能力，并具有一定的项目推动能力；&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;喜欢研究及尝试新技术，追求编写优雅的代码，从技术趋势和思路上影响技术团队。&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="资深 Java 工程师-商业化（电商方向）（20k-30k）"&gt;资深 Java 工程师 - 商业化（电商方向）（20k-30k）&lt;/h3&gt;&lt;h5 id="工作职责："&gt;工作职责：&lt;/h5&gt;
&lt;p&gt;与 SaaS 产品售卖相关的交易、商品、营销等功能的架构和系统设计、开发和维护。&lt;/p&gt;
&lt;h5 id="岗位职责："&gt;岗位职责：&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;参与完成架构和系统分析设计，并主导完成详细的设计，负责核心功能代码实现与单元测试；&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;主导中大型的项目，参与项目管理，为项目整体结果负责，确保项目如期高质量交付；&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;参与系统稳定性建设，例如数据核对、线上问题处理归纳分析、监控梳理和优化；&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;及时进行业务和技术沉淀总结，有提高影响力的意识，能够带动 3-4 名小伙伴成长。&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id="任职条件："&gt;任职条件：&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;两年以上的电商行业经验，有过交易、商品、营销这些模块之一的开发和设计经验，有过 SaaS 产品售卖（例如阿里云）行业经验更佳；&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;三年以上 Java 开发经验，基础扎实，熟练掌握常用 Java 技术框架；&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;熟悉底层中间件、分布式技术（包括缓存、消息系统、热部署等）；&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;良好的面向对象设计理解，掌握设计模式及应用场景；&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;具有比较强的问题分析和处理能力，热衷技术，精益求精，有一定的技术癖；&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;有项目管理经验，具备非常好的沟通协调能力，有很强的结果意识。&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;请原谅我来社区发与 ruby 无关的招聘贴，只因为&lt;code&gt;Ruby China&lt;/code&gt; 作为一个高质量社区，忍不住不发 &lt;img title=":blush:" alt="😊" src="https://twemoji.ruby-china.com/2/svg/1f60a.svg" class="twemoji"&gt; &lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="联系方式"&gt;联系方式&lt;/h2&gt;
&lt;p&gt;坐标：杭州西湖区西溪路（西站旁边）&lt;/p&gt;

&lt;p&gt;邮箱：didmehh#163.com&lt;/p&gt;</description>
      <author>xiaohesong</author>
      <pubDate>Mon, 18 May 2020 22:33:59 +0800</pubDate>
      <link>https://ruby-china.org/topics/39882</link>
      <guid>https://ruby-china.org/topics/39882</guid>
    </item>
    <item>
      <title>Grape 方法小汇！</title>
      <description>&lt;h6 id="用grape写了两天的api，写个方法小结，以备后用。废话不多说，直接上代码。"&gt;用 grape 写了两天的 api，写个方法小结，以备后用。废话不多说，直接上代码。&lt;/h6&gt;&lt;h3 id="entity内的用法"&gt;entity 内的用法&lt;/h3&gt;&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="sb"&gt;`app/apis/v1/customers.rb`&lt;/span&gt;
&lt;span class="k"&gt;module&lt;/span&gt; &lt;span class="nn"&gt;V1&lt;/span&gt;
  &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Customers&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="no"&gt;Grape&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;API&lt;/span&gt;
    &lt;span class="n"&gt;resource&lt;/span&gt; &lt;span class="ss"&gt;:customers&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;desc: &lt;/span&gt;&lt;span class="s2"&gt;"客户相关"&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
      &lt;span class="n"&gt;add_desc&lt;/span&gt; &lt;span class="s2"&gt;"客户列表"&lt;/span&gt;
      &lt;span class="n"&gt;get&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
        &lt;span class="n"&gt;present&lt;/span&gt; &lt;span class="n"&gt;current_store&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;store_customers&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;with: &lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Entities&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Customer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;type: :default&lt;/span&gt;
      &lt;span class="k"&gt;end&lt;/span&gt;

      &lt;span class="n"&gt;add_desc&lt;/span&gt; &lt;span class="s2"&gt;"客户详情"&lt;/span&gt;
      &lt;span class="n"&gt;get&lt;/span&gt; &lt;span class="s2"&gt;":id"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;requirements: &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="ss"&gt;id: &lt;/span&gt;&lt;span class="sr"&gt;/[0-9]*/&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
        &lt;span class="n"&gt;present&lt;/span&gt; &lt;span class="no"&gt;StoreCustomer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;find&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:id&lt;/span&gt;&lt;span class="p"&gt;]),&lt;/span&gt; &lt;span class="ss"&gt;with: &lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Entities&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Customer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;type: :full&lt;/span&gt;
      &lt;span class="k"&gt;end&lt;/span&gt;
    &lt;span class="k"&gt;end&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;那么我们再来看看对应的显示层。
&lt;code&gt;app/apis/entities/customer.rb&lt;/code&gt;&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="k"&gt;module&lt;/span&gt; &lt;span class="nn"&gt;Entities&lt;/span&gt;
  &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Customer&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="no"&gt;Grape&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Entity&lt;/span&gt;
    &lt;span class="n"&gt;expose&lt;/span&gt; &lt;span class="ss"&gt;:age&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;if: &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="ss"&gt;type: :default&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;  &lt;span class="c1"&gt;#客户列表显示（对应的type）&lt;/span&gt;
    &lt;span class="n"&gt;expose&lt;/span&gt; &lt;span class="ss"&gt;:phone_number&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;if: &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="ss"&gt;type: :full&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;   &lt;span class="c1"&gt;#客户详情显示（对应的type）&lt;/span&gt;
    &lt;span class="n"&gt;expose&lt;/span&gt; &lt;span class="ss"&gt;:name&lt;/span&gt;   &lt;span class="c1"&gt;#客户列表，客户详情都会显示&lt;/span&gt;
    &lt;span class="n"&gt;expose&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;:login_name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;if: &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="ss"&gt;type: :default&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;phone_number&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;  &lt;span class="c1"&gt;#自定义expose显示的名称，判断加在（）里。&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;NOTE:  expose(:xx) 等同于官网给出的块的形式。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id="Grape内的路由问题"&gt;Grape 内的路由问题&lt;/h3&gt;&lt;h5 id="对于一些嵌套路由，可以使用grape的嵌套路由。"&gt;对于一些嵌套路由，可以使用 grape 的嵌套路由。&lt;/h5&gt;&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;route_param&lt;/span&gt; &lt;span class="ss"&gt;:customer_id&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
  &lt;span class="n"&gt;resource&lt;/span&gt; &lt;span class="ss"&gt;:girls&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="c1"&gt;# 对应的路由为 xx/customers/{customer_id}/girls&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="Grape内只可以调用类方法？"&gt;Grape 内只可以调用类方法？&lt;/h3&gt;&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="k"&gt;module&lt;/span&gt; &lt;span class="nn"&gt;V1&lt;/span&gt;
  &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Customer&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="no"&gt;Grape&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;API&lt;/span&gt;
    &lt;span class="n"&gt;get&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
      &lt;span class="n"&gt;customer_params&lt;/span&gt;
      &lt;span class="n"&gt;present&lt;/span&gt; &lt;span class="n"&gt;current_store&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;store_customers&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;with: &lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Entities&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Customer&lt;/span&gt;
    &lt;span class="k"&gt;end&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;customer_params&lt;/span&gt;
      &lt;span class="s2"&gt;"hello"&lt;/span&gt;
    &lt;span class="k"&gt;end&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="c1"&gt;# 有报错为undefined local variable or method `customer_params'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;如若将 方法转换成类方法呢？&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;你去试试吧&lt;img title=":cold_sweat:" alt="😰" src="https://twemoji.ruby-china.com/2/svg/1f630.svg" class="twemoji"&gt;&lt;/p&gt;
&lt;h5 id="做如下改变再试试："&gt;做如下改变再试试：&lt;/h5&gt;&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="k"&gt;module&lt;/span&gt; &lt;span class="nn"&gt;V1&lt;/span&gt;
  &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Customer&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="no"&gt;Grape&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;API&lt;/span&gt;
    &lt;span class="n"&gt;get&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
      &lt;span class="n"&gt;customer_params&lt;/span&gt;
      &lt;span class="n"&gt;present&lt;/span&gt; &lt;span class="n"&gt;current_store&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;store_customers&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;with: &lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Entities&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Customer&lt;/span&gt;
    &lt;span class="k"&gt;end&lt;/span&gt;
    &lt;span class="n"&gt;helpers&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
      &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;customer_params&lt;/span&gt;
        &lt;span class="s2"&gt;"hello"&lt;/span&gt;
      &lt;span class="k"&gt;end&lt;/span&gt;
    &lt;span class="k"&gt;end&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;发现加上 helpers 还是有点爱的。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id="创建功能出现的问题"&gt;创建功能出现的问题&lt;/h3&gt;&lt;h5 id="grape本身拥有一个params处理机制。"&gt;grape 本身拥有一个 params 处理机制。&lt;/h5&gt;&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;declared&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;include_missing: &lt;/span&gt;&lt;span class="kp"&gt;false&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;用这个写呀写呀的。。&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;declared&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;include_missing: &lt;/span&gt;&lt;span class="kp"&gt;false&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;slice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;:name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:age&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="c1"&gt;#这样取出需要的参数&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;最后测试发现，报错 ActiveModel::ForbiddenAttributesError。
因为 strong_params 的安全机制。
不过也不是不可以，他提供了一个 gem 去解决这个情况：&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Additionally, if the version of your Rails is 4.0+ and the application uses the default model layer of ActiveRecord, you will want to use the hashie-forbidden_attributes gem. This gem disables the security feature of strong_params at the model layer, allowing you the use of Grape's own params validation instead.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;代码如下：
&lt;a href="https://github.com/rails/strong_parameters/blob/master/lib/active_model/forbidden_attributes_protection.rb" rel="nofollow" target="_blank"&gt;https://github.com/rails/strong_parameters/blob/master/lib/active_model/forbidden_attributes_protection.rb&lt;/a&gt;&lt;/p&gt;
&lt;h5 id="我是个保守的人，还是用strong params 来搞吧。"&gt;我是个保守的人，还是用 strong params 来搞吧。&lt;/h5&gt;&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;customer_params&lt;/span&gt;
  &lt;span class="n"&gt;customer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;ActionController&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Parameters&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="n"&gt;customer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;permit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;:name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:age&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;grape-doc: &lt;a href="http://www.rubydoc.info/github/intridea/grape-entity/Grape" rel="nofollow" target="_blank"&gt;http://www.rubydoc.info/github/intridea/grape-entity/Grape&lt;/a&gt;
不是之处，欢迎各位不吝指出。&lt;img title=":relaxed:" alt="☺" src="https://twemoji.ruby-china.com/2/svg/263a.svg" class="twemoji"&gt;&lt;/p&gt;</description>
      <author>xiaohesong</author>
      <pubDate>Tue, 16 Feb 2016 10:49:27 +0800</pubDate>
      <link>https://ruby-china.org/topics/28999</link>
      <guid>https://ruby-china.org/topics/28999</guid>
    </item>
  </channel>
</rss>
