<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>yngzij</title>
    <link>https://ruby-china.org/yngzij</link>
    <description></description>
    <language>en-us</language>
    <item>
      <title>老哥们,通过 npm 导入 backbone 不工作是我哪里错了吗?</title>
      <description>&lt;p&gt;&lt;strong&gt;这个 package.json 文件依赖&lt;/strong&gt;&lt;/p&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="nl"&gt;"dependencies"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"@rails/webpacker"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"5.4.3"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"backbone"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^1.4.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"jquery"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^3.6.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"webpack"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^4.46.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"webpack-cli"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^3.3.12"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"devDependencies"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;已经在 application.js 中导入了 Backbone&lt;/strong&gt;&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="sr"&gt;//&lt;/span&gt; &lt;span class="no"&gt;Configure&lt;/span&gt; &lt;span class="n"&gt;your&lt;/span&gt; &lt;span class="n"&gt;import&lt;/span&gt; &lt;span class="n"&gt;map&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;importmap&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;rb&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="no"&gt;Read&lt;/span&gt; &lt;span class="ss"&gt;more: &lt;/span&gt;&lt;span class="n"&gt;https&lt;/span&gt;&lt;span class="ss"&gt;:/&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;github&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;com&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;rails&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;importmap&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;rails&lt;/span&gt;

&lt;span class="n"&gt;import&lt;/span&gt; &lt;span class="s1"&gt;'./index.css'&lt;/span&gt;

&lt;span class="n"&gt;import&lt;/span&gt; &lt;span class="n"&gt;jQuery&lt;/span&gt; &lt;span class="n"&gt;from&lt;/span&gt; &lt;span class="s2"&gt;"jquery"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="n"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;jQuery&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;jQuery&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;window&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;jQuery&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="n"&gt;window&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="no"&gt;Backbone&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"backbone"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;_&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"underscore"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="n"&gt;var&lt;/span&gt; &lt;span class="no"&gt;AppView&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Backbone&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="no"&gt;View&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;extend&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="ss"&gt;el: &lt;/span&gt;&lt;span class="s2"&gt;"body"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="ss"&gt;events: &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="s2"&gt;"click #box"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"click"&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="n"&gt;initialize&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;alert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'init'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="n"&gt;click&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;alert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'click'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="n"&gt;var&lt;/span&gt; &lt;span class="n"&gt;appView&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;new&lt;/span&gt; &lt;span class="no"&gt;AppView&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;在 html 中点击没有作用&lt;/strong&gt;&lt;/p&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;html&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;title&amp;gt;&lt;/span&gt;Untitled&lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"viewport"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"width=device-width,initial-scale=1"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="err"&gt;%=&lt;/span&gt; &lt;span class="na"&gt;csrf_meta_tags&lt;/span&gt; &lt;span class="err"&gt;%&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="err"&gt;%=&lt;/span&gt; &lt;span class="na"&gt;csp_meta_tag&lt;/span&gt; &lt;span class="err"&gt;%&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="err"&gt;%=&lt;/span&gt; &lt;span class="na"&gt;stylesheet_pack_tag&lt;/span&gt; &lt;span class="err"&gt;"&lt;/span&gt;&lt;span class="na"&gt;application&lt;/span&gt;&lt;span class="err"&gt;",&lt;/span&gt; &lt;span class="err"&gt;"&lt;/span&gt;&lt;span class="na"&gt;data-turbo-track&lt;/span&gt;&lt;span class="err"&gt;"&lt;/span&gt;&lt;span class="na"&gt;:&lt;/span&gt; &lt;span class="err"&gt;"&lt;/span&gt;&lt;span class="na"&gt;reload&lt;/span&gt;&lt;span class="err"&gt;"&lt;/span&gt; &lt;span class="err"&gt;%&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="err"&gt;%=&lt;/span&gt; &lt;span class="na"&gt;javascript_pack_tag&lt;/span&gt; &lt;span class="err"&gt;"&lt;/span&gt;&lt;span class="na"&gt;application&lt;/span&gt;&lt;span class="err"&gt;",&lt;/span&gt; &lt;span class="na"&gt;defer:&lt;/span&gt; &lt;span class="na"&gt;false&lt;/span&gt; &lt;span class="err"&gt;%&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"box"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  box
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="err"&gt;%=&lt;/span&gt; &lt;span class="na"&gt;yield&lt;/span&gt; &lt;span class="err"&gt;%&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;</description>
      <author>yngzij</author>
      <pubDate>Thu, 20 Jan 2022 20:09:55 +0800</pubDate>
      <link>https://ruby-china.org/topics/42094</link>
      <guid>https://ruby-china.org/topics/42094</guid>
    </item>
    <item>
      <title>从零学习 Rails 记录 (第二天)</title>
      <description>&lt;p&gt;学习 rails 的第二天，一步一步来嘛!!!
&lt;br&gt;&lt;br&gt;&lt;/p&gt;
&lt;h4 id="添加第二个关联Model"&gt;添加第二个关联 Model&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt; 生成 Model &lt;code&gt;rails generate model  Comment commenter:string body:text article:references&lt;/code&gt;  这里 comment 和 Comment 生成 Model 一样的&lt;/li&gt;
&lt;li&gt;迁移到数据库  &lt;code&gt;rails db:migrate&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt; 在文章路由下添加子路由 &lt;/li&gt;
&lt;li&gt;生成 Controller &lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="在View 中添加评论功能，其中关键的就是这一段代码了"&gt;在 View 中添加评论功能，其中关键的就是这一段代码了&lt;/h3&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt; &amp;lt;%= form_for([@work, @work.comments.build]) do |f| %&amp;gt;
  &amp;lt;p&amp;gt;
    &amp;lt;%= f.label :commenter %&amp;gt;&amp;lt;br&amp;gt;
    &amp;lt;%= f.text_field :commenter %&amp;gt;
  &amp;lt;/p&amp;gt;
  &amp;lt;p&amp;gt;
    &amp;lt;%= f.label :body %&amp;gt;&amp;lt;br&amp;gt;
    &amp;lt;%= f.text_area :body %&amp;gt;
  &amp;lt;/p&amp;gt;
  &amp;lt;p&amp;gt;
    &amp;lt;%= f.submit %&amp;gt;
  &amp;lt;/p&amp;gt;
&amp;lt;% end %&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;再看看对应的 Controller 方法&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def show
  @work=Work.find params[:id]
end
def create
 @work=Work.new work_params
 if @work.save
    redirect_to @work
else 
    render 'new'
  end
end
&lt;/code&gt;&lt;/pre&gt;
&lt;ol&gt;
&lt;li&gt;show 方法在 create 成功保存后在 create 方法中重定向调用，显示创建的&lt;a href="/work" class="user-mention" title="@work"&gt;&lt;i&gt;@&lt;/i&gt;work&lt;/a&gt;对象数据。&lt;/li&gt;
&lt;li&gt;redirect_to 把自己创建好的 work 对象发送给 show 方法，show 方法通过 id 查找到相应的 work 对象&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;&amp;lt;%= form_for([@work, @work.comments.build]) do |f| %&amp;gt;&lt;/code&gt;   因为 create 的路由是  &lt;code&gt;post  /works/:work_id/comments(.:format)&lt;/code&gt; 评论需要嵌套在文章中，&lt;a href="/work" class="user-mention" title="@work"&gt;&lt;i&gt;@&lt;/i&gt;work&lt;/a&gt; 是在 controller 中查找到的对象，在&lt;a href="/work" class="user-mention" title="@work"&gt;&lt;i&gt;@&lt;/i&gt;work&lt;/a&gt;  model 中用 &lt;code&gt;has_many&lt;/code&gt; 关联了，所以能在&lt;a href="/work.comments.build" class="user-mention" title="@work.comments.build"&gt;&lt;i&gt;@&lt;/i&gt;work.comments.build&lt;/a&gt; 可以用&lt;/li&gt;
&lt;li&gt;如果保存不成功 ,在 new 界面显示错误&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;** 这里 render ,link_to, redirect_to ** 三者的区别&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;link_to 在网站上生成  超链接 的代码 用于 view 中连接到其他路由&lt;/li&gt;
&lt;li&gt;render 将指定视图作为响应，这里在没有保存成功 ,render 到'new'  在 new.html.erb 中会将&lt;a href="/work" class="user-mention" title="@work"&gt;&lt;i&gt;@&lt;/i&gt;work&lt;/a&gt;错误中的错误显示出来，因为在同一个方法中，显示的就是本方法中的&lt;a href="/wrok" class="user-mention" title="@wrok"&gt;&lt;i&gt;@&lt;/i&gt;wrok&lt;/a&gt;，而且 render 还能导入代码。&lt;/li&gt;
&lt;li&gt;redirect_to  重定向，将浏览器重定向到指定的目标，为什么 &lt;code&gt;@work&lt;/code&gt; 就是 show 页  &lt;a href="/work" class="user-mention" title="@work"&gt;&lt;i&gt;@&lt;/i&gt;work&lt;/a&gt; 不是在 create 方法中创建的一个对象吗？难道因为路由是 &lt;code&gt;work GET /works/:id(.:format) works/show&lt;/code&gt; 吗   这里自己的理解也不好，百度了好多也是模模糊糊的 &lt;img title=":sob:" alt="😭" src="https://twemoji.ruby-china.com/2/svg/1f62d.svg" class="twemoji"&gt; &lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="显示评论"&gt;显示评论&lt;/h3&gt;
&lt;p&gt;代码位置  app/views/articles/show.html.erb&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;h2&amp;gt;Comments&amp;lt;/h2&amp;gt;
&amp;lt;% @work.comments.each do |comment| %&amp;gt;
  &amp;lt;p&amp;gt;
    &amp;lt;strong&amp;gt;Commenter:&amp;lt;/strong&amp;gt;
    &amp;lt;%= comment.commenter %&amp;gt;
  &amp;lt;/p&amp;gt;

  &amp;lt;p&amp;gt;
    &amp;lt;strong&amp;gt;Comment:&amp;lt;/strong&amp;gt;
    &amp;lt;%= comment.body %&amp;gt;
  &amp;lt;/p&amp;gt;
&amp;lt;% end %&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;将 Controller 中找到的&lt;a href="/work" class="user-mention" title="@work"&gt;&lt;i&gt;@&lt;/i&gt;work&lt;/a&gt;中的 comments 模型内容显示出来，demo 在 (&lt;a href="https://github.com/yngzij/rails-" rel="nofollow" target="_blank"&gt;https://github.com/yngzij/rails-&lt;/a&gt;) 希望对后来的朋友有帮助&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;安装和生成框架就算完了 其他重构，验证什么的都很容易理解，redirect_to 和 render 谢谢朋友能解释下 &lt;img title=":sweat_smile:" alt="😅" src="https://twemoji.ruby-china.com/2/svg/1f605.svg" class="twemoji"&gt; a&lt;br&gt;
&lt;/li&gt;
&lt;li&gt;create 后 redirect_to &lt;a href="/work" class="user-mention" title="@work"&gt;&lt;i&gt;@&lt;/i&gt;work&lt;/a&gt; 定向到 show 页面，显示的是 new 中创建的数据，那 show 是怎么获取到的呀 &lt;img title=":smile:" alt="😄" src="https://twemoji.ruby-china.com/2/svg/1f604.svg" class="twemoji"&gt; &lt;/li&gt;
&lt;/ul&gt;</description>
      <author>yngzij</author>
      <pubDate>Thu, 24 Aug 2017 23:32:13 +0800</pubDate>
      <link>https://ruby-china.org/topics/33933</link>
      <guid>https://ruby-china.org/topics/33933</guid>
    </item>
    <item>
      <title>从零学习 Rails 记录 (第一天)</title>
      <description>&lt;p&gt;第一次发文，都是 (&lt;a href="https://ruby-china.github.io/rails-guides/v4.1/getting_started.html" rel="nofollow" target="_blank"&gt;https://ruby-china.github.io/rails-guides/v4.1/getting_started.html&lt;/a&gt;)  的教程自己总结，需要大家的鼓励嘞，话不多少，直接开始，都是个人的理解，不对的地方谢谢朋友指出来 ,使用&lt;a href="/huacnlee" class="user-mention" title="@huacnlee"&gt;&lt;i&gt;@&lt;/i&gt;huacnlee&lt;/a&gt;  老师的方法，谢谢老师。&lt;br&gt;&lt;/p&gt;
&lt;h3 id="首先 rails使用的是M(Model) V(View) C(controller) 架构 ，简单一点 Model 也就是一个数据结构，并且可以在Model 中限制数据的格式 ，    Controller 就是在路由发送请求，你去帮路由处理的方法，我觉得可以理解为View 的后台吧，View 就是显示的视图 ,Model 可以和Controller直接通信，View可以和Controller直接通信。"&gt;首先 rails 使用的是 M(Model) V(View) C(controller) 架构，简单一点 Model 也就是一个数据结构，并且可以在 Model 中限制数据的格式，Controller 就是在路由发送请求，你去帮路由处理的方法，我觉得可以理解为 View 的后台吧，View 就是显示的视图 ,Model 可以和 Controller 直接通信，View 可以和 Controller 直接通信。&lt;/h3&gt;&lt;h3 id="route 的请求一般常见的就是post请求，用于发送数据，比如登陆，get请求一般是页面的跳转，在网站名中可以看到get请求会带有路径，还有delete,put 。"&gt;route 的请求一般常见的就是 post 请求，用于发送数据，比如登陆，get 请求一般是页面的跳转，在网站名中可以看到 get 请求会带有路径，还有 delete,put。&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;rails new first_app&lt;/code&gt; 会自动帮你生成一个框架，也就是创建一个 rails 项目，项目的名字为 first_app，今天用到了 app 目录下的 contrellor, view,model。cd 到项目目录 运行&lt;code&gt;rails server&lt;/code&gt;就能看到服务器已经启动了，如果不能启动（使用 linux 的朋友可以用 nohup rails s &amp;amp; ）后台运行，我开始是 nodejs 没有安装 后来一次错误是默认的 3000 号端口被占用了。&lt;/p&gt;
&lt;h4 id="生成路由"&gt;生成路由&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;rails generate controller Welcome index&lt;/code&gt;   会在首先会在 app/controllers/welcome_controller.rb 中为你生成一个 index 路由，也会在 app/Views/welcome 中自动生成一个
index.html.erb 的 view 视图文件，因为你的 controller 中只有 index 这个方法，所用你只能通过 config/routes.rb 中的 get 'welcome/index' 访问 index 这个 view    &lt;code&gt;localhost:3000/welcome/index&lt;/code&gt;如果你想添加其他的路径，不但需要在 controllor 中添加方法，还需要在 view 中为这个方法创建一个同名的 view 视图文件。应为没有添加任何数据，所以不关 model 什么事。&lt;/p&gt;
&lt;h3 id="CRUD操作"&gt;CRUD 操作&lt;/h3&gt;
&lt;p&gt;在 config/routes 中添加  &lt;code&gt;resources :works&lt;/code&gt;  会自动生成路由  你可以通过 &lt;code&gt;rails routes&lt;/code&gt;  查看生成的路由 &lt;strong&gt;注意 仅仅只是生成了路由 controller view 都没有&lt;/strong&gt;
所以 你必须手动生成 Controller  &lt;code&gt;rails generate controller works&lt;/code&gt;  可以看到生成了 works 的 views 文件夹和 works_controller.rb 控制器 现在 &lt;code&gt;localhost:3000/works&lt;/code&gt; 还是打不开 因为你 &lt;code&gt;works_controler.rb&lt;/code&gt; 中有 index 的方法吗？你的 app/views/works/目录下也没有 index.html.erb 的 view 文件吧。你在 &lt;code&gt;rails routes&lt;/code&gt; 中所有看到的请求路径都需要自己手动添加方法和创建  &lt;strong&gt;view&lt;/strong&gt; 视图 &lt;/p&gt;
&lt;h3 id="注意"&gt;注意&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;你在 &lt;code&gt;rails routes&lt;/code&gt; 中看到的 works#index 目录是 works 也就是说 works_path 就是他的路径 &lt;/li&gt;
&lt;li&gt;post 路径是不可以打开的&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="创建表单"&gt;创建表单&lt;/h3&gt;
&lt;p&gt;在 new.html.erb 下
源代码如下：&lt;br&gt;&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;%= form_for :list do |f| %&amp;gt;
  &amp;lt;p&amp;gt;
    &amp;lt;%= f.label :title %&amp;gt;&amp;lt;br&amp;gt;
    &amp;lt;%= f.text_field :title %&amp;gt;
  &amp;lt;/p&amp;gt;
  &amp;lt;p&amp;gt;
    &amp;lt;%= f.label :text %&amp;gt;&amp;lt;br&amp;gt;
    &amp;lt;%= f.text_area :text %&amp;gt;
  &amp;lt;/p&amp;gt;

  &amp;lt;p&amp;gt;
    &amp;lt;%= f.submit %&amp;gt;
  &amp;lt;/p&amp;gt;
&amp;lt;% end %&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;其中 list 是一个重要的参数，保存着 text 框中输入的数据，那么问题来了 发送到哪嘞  &lt;code&gt;&amp;lt;%= form_for :list, url:works_path do |f| %&amp;gt;&lt;/code&gt; url 后就是发送的目标 注意 是发送给 works 的 post 请求，也就是 works/create  他是没有视图的，但是必须要在 controller 中给他创建一个 create 方法，这个时候，要保存数据，就需要使用 Model 了。&lt;/p&gt;
&lt;h3 id="Model"&gt;Model&lt;/h3&gt;
&lt;p&gt;前面说了 Model 类似数据结构，用来声明存储数据的类型。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;首先创建一个 Model  &lt;code&gt;rails generate model Work  title:string  text:text&lt;/code&gt;  两个存储文本的对象&lt;/li&gt;
&lt;li&gt;迁移数据  &lt;code&gt;rails  db:migrate&lt;/code&gt; 就是在数据库中声明同样的表，假如写错了 可以 &lt;code&gt;rails  rollback&lt;/code&gt; 取消上次的迁移操作&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="存储"&gt;存储&lt;/h3&gt;
&lt;p&gt;在 app/controller/works_controller.rb 中&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; def create
@work=Work.new(params.require(:list).permit(:title, :text)) 
  @work.save
  redirect_to @work
end
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如果用 &lt;code&gt;@lis =Work.new(params[:article])&lt;/code&gt;  会出错 必须设置能通过的白名单 title 和 text 就类似防火墙的机制吧 问下大神 是不是 Moel 必须和对应的 Controller 名相同，比如是 Work 和 works，我之前 Model 用 List 一直报错   redirect_to  找不到路径
&lt;/p&gt;&lt;p&gt; 这里 list 就是上文 view 中的 list  用 post 的方式发送给 create  注意 works 有一个 get 的 index 和 post 的 create 请求，接收到数据后 index/X 显示 &lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def show
    @work=Work.find(params[:id])
  end
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;当然还有在 app/views/works/下面创建 show.html.erb 的视图啦&lt;/p&gt;
&lt;h3 id="Moel 的使用"&gt;Moel 的使用&lt;/h3&gt;
&lt;p&gt;可以在 app/models 下找到对应的文件设置，一般有不能设置为空，字符长度的限制。&lt;/p&gt;
&lt;h2 id="小结"&gt;小结&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;如果 Model 和 Controller 名不同，在 New 界面填写后不能跳转到 index 界面 有找不到路径的错误。&lt;/li&gt;
&lt;li&gt;f.text_area 是固定的参数吗？&lt;/li&gt;
&lt;li&gt;在/confog/routes.rb 下面设置 root 路径 格式 &lt;code&gt;root  'works#new'&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;</description>
      <author>yngzij</author>
      <pubDate>Thu, 24 Aug 2017 01:10:41 +0800</pubDate>
      <link>https://ruby-china.org/topics/33915</link>
      <guid>https://ruby-china.org/topics/33915</guid>
    </item>
  </channel>
</rss>
