0
点赞
收藏
分享

微信扫一扫

ruby on rails学习笔记

楠蛮鬼影 2022-02-08 阅读 62


ruby on rails学习笔记_css


文章目录


  • ​​css的引入​​
  • ​​rails form_with​​
  • ​​切分视图重复代码,让代码变得更简洁​​
  • ​​路由​​
  • ​​在rails框架中使用js​​


​​参考文章​​

​​完整代码​​

用了一下午的时间,大概入了个门

和其他的MVC框架大差小不差

比较有特点的地方就是他真的很方便,方便到有时候你根本不知道代码是啥意思,他会帮你自动定义出很多有用的方法,最厉害的地方就是你根本不知道他们是在哪里定义的

我是跟着官网学的

目前接触到的最复杂的地方是就是​​articles​​​控制器了​​demo\app\controllers\articles_controller.rb​

该控制器中有很多action,其中​​index​​​ action对应的view​​C:\Sites\demo\app\views\articles\index.html.erb​​中的代码就出现了我上面说的不知道在哪里定义的方法

文件内容如下:

<h1>Listing Articles</h1>
<%= link_to 'New article', new_article_path %>
<table>
<tr>
<th>Title</th>
<th>Text</th>
<th></th>
</tr>

<% @articles.each do |article| %>
<tr>
<td><%= article.title %></td>
<td><%= article.text %></td>
<td><%= link_to 'Show', article_path(article) %></td>
</tr>
<% end %>
</table>

其中​​new_article_path​​​和​​article_path​​​这两个方法我根本不知道是哪里来的,当我试图把第一个方法的​​new​​​改成​​index​​​,也就是​​index_article_path​​,爆出了如下错误

ruby on rails学习笔记_方法名_02

不明白为啥只有​​edit_article_path​​​和​​new_article_path​​这两个方法

关于第二个方法(article_path)的疑问参考这个​​回答​​

同样的,这个方法的定义位置我也不知道

评论区如果有大佬的话可以指点一下

我好像有点懂了

通过在rails应用目录下执行​​rake routes​​,可以得到路由的详情:

ruby on rails学习笔记_方法名_03

这三个就上我们上面说的找不到定义位置的那三个方法,只不过实际使用的时候加了个​​_path​

ruby on rails学习笔记_css_04

这样一来,上面的那个StackOverflow上的回答也就明白了,一个post方法一个GET方法,当两个方法名字一样时,rails会根据请求方法是POST还是GET来决定使用哪一个action

css的引入

在进行到数据验证章节时,教程中提到rails会自动将错误的html体包含在一个class=field_with_errors的div标签中,我们可以编写自己的样式表来对他们进行渲染

rails如何知道css在哪呢?

答案是rails有一个统一的位置​​C:\Sites\demo\app\assets\stylesheets\application.css​​​,​​application.css​​​会把当前目录下的所有​​csss​​文件包含进来,我们要渲染哪个控制器对应的视图,就以哪个控制器命名文件

ruby on rails学习笔记_html_05

由于我们渲染的页面是articls控制器的视图,所以我们就在​​articles.scss​​文件中编写样式表,运行效果如下:

rails form_with

我们上面已经出现过​​form_with scope: :article​

这里的​​scope​​是啥意思呢?

​​参考链接​​

这个我也不是太清楚

ruby on rails学习笔记_css_07

切分视图重复代码,让代码变得更简洁

我们这里拿​​form_with​​​举例,我们现在已经写出了​​new​​​和​​edit​​​视图,这两个视图都用了​​form_with​​​,他俩的表单代码几乎是一样的,那么我们就可以把这一部分代码抽取出来,写入到视图目录下的​​_form.html.erb​​,这个命名是有讲究的,第一个字符必须为_

我们这里拿​​new.html.erb​​举例,原来的代码是这样的:

<h1>New Article</h1>

<%= form_with scope: :article, url: articles_path, local: true do |form| %>

<% if @article.errors.any? %>
<div id="error_explanation">
<h2>
<%= pluralize(@article.errors.count, "error") %> prohibited
this article from being saved:
</h2>
<ul>
<% @article.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>

<p>
<%= form.label :title %><br>
<%= form.text_field :title %>
</p>

<p>
<%= form.label :text %><br>
<%= form.text_area :text %>
</p>

<p>
<%= form.submit %>
</p>

<% end %>

<%= link_to 'Back', articles_path %>

现在我们把​​form​​​提取出来,单独写成一个文件之后,新的​​new.html.rb​​是这个样子的

<h1>New Article</h1>

<%= render 'form' %>

<%= link_to 'Back', articles_path %>

路由

创建路由的时候要同时创建出控制器,不然会提示你没有匹配的路由

静态路由的创建是非常简单的,直接编辑​​config/routes.rb​​,在里面加入一行

get test/test

然后创建出test控制器,并定义test动作,还要创建出对应的test视图,然后就完事儿了

在rails框架中使用js

​​参考文章​​

注意我们使用的是rails 6,低版本请参考其他文章

在​​app\javascript\​​​目录中创建一个目录​​custom​​​用来存放我们自己编写的​​js​​​文件,在该目录中创建一个​​custom.js​​,内容如下:

window.do_smth = function() {
alert('hello');
}

然后随便找一个视图,添加一个按钮检测效果:

<a href="#" onclick="do_smth()">dosmth</a>

上面的这种使用方式好像不是太好用,因为,我要达到的目标是更新dom,但是经过我的实际测试,使用​​window.方法名=function()​​这种方式定义的方法根本无法满足我的需求,大家可以看一下使用这种方式实现的效果:

可以看到,更更新完成的dom立马又被刷新为原来的样式了,这样对我们来说是没用的

详细使用方式:

​​参考这篇文章​​

​​原文链接​​

​​备份地址​​



举报

相关推荐

0 条评论