DMOZ中文网站分类目录-免费收录各类优秀网站的中文网站目录.
  • DmozDir.org
DMOZ目录快速登录入口-免费收录各类优秀网站的中文网站目录.由人工编辑,并提供网站分类目录检索及地区分类目录检索,是站长免费推广网站的有力平台!

从头Rails的标记

  • 从头Rails的标记

  • 已被浏览: 73 次2020年10月12日    来源:  DMOZ中文网站分类目录
  • 标签是有点像类别,描述一条信息(内容),并允许对用户搜索它
    Price tag icon

    标签是有点像类别,描述一条信息(内容)并允许用户再次搜索。在本教程中,你将看到如何构建一个简单的标签系统,从地上爬起来,Rails中。

    本教程假定使用Ruby on Rails的基本知识。我会尽量保持简单。

    的标签,这是我们都已经知道的一个常见用途,是由Twitter围绕有关(散)标签某一主题收集的鸣叫。

    工具

    Rails的4.1.4

    红宝石2.0.1

    基金会5

    入门

    这个应用程序的enitre源代码可以在这个库中找到

    首先,创建您的Rails项目:

    <预的tabindex = “0” 类= “语言的bash ”> <代码类=“ 语言的bash”>导轨新TaggingTut

    然后,将基础护栏宝石添加到Gemfile中,被删除<代码> turbolinks 宝石。运行<代码>束安装

    我们将使用SQLite,使用Rails的默认数据库

    从应用程序/资产/ JavaScript的/的application.js删除此行中,由于我们除去<代码> turbolinks 宝石。

    <预的tabindex = “0” 类= “语言红宝石 ”> <代码类=“ 语言红宝石”> // =需要turbolinks

    创建标签

    产生具有单属性为标签模型,<代码>名称

    <预的tabindex = “0” 类= “语言的bash ”> <代码类=“ 语言的bash”>导轨克型号标记名:字符串

    我们将指数的name属性(<码>指数:真正的)来加快我们的这些标签。我建议这个教程在Rails的协会使用索引。

    标签有很多帖子,邮电可以有多个标签。因此,双方的关系将是多到很多。我们可以从两个方面代表该协会在Rails的:

    第一:使用一个<代码> has_and_belongs_to_many 关联。这将在数??据库中生成的连接表,但不会是一个生成的模型的加入。所以,你将无法验证或任何其他属性添加到加入。

    第二:使用<代码>的has_many,通过这需要一个模型要创建的连接表。这种方式优先在大多数情况下,所以我们将使用它。

    创建模型“邮报”和“标记”,以及

    <预的tabindex =“0”类=“语言的bash‘> <代码类=’语言的bash”>导轨克模型帖子作者:字符串内容:文本

    导轨克模型标记后:belongs_to的标签:belongs_to的

    创建这些模型后,运行<代码>耙分贝:迁移

    现在,我们将通过ActiveRecord的创造职位和标签之间的关联,如下所示:

    应用程序/模型/ post.rb

    <预的tabindex =“0”类=“语言红宝石‘> <代码类=’语言红宝石”>的has_many:的Tagging

    的has_many:标签,通过:的Tagging

    应用程序/模型/ tag.rb

    <预的tabindex =“0”类=“语言红宝石‘> <代码类=’语言红宝石”>的has_many:的Tagging

    的has_many:讯息,通过:的Tagging

    应用程序/模型/ tagging.rb将像这样产生的:

    <预的tabindex =“0”类=“语言红宝石‘> <代码类=’语言红宝石”> belongs_to的:交

    belongs_to的:标记

    现在,我们必须通过帖子的Tagging和标签之间的连接连接表。

    现在,我们需要处理的标签创建视后的的一部分创建的动作。因此,我们将定义一个方法把所有输入的标签,去掉它们,然后写每个标签数据库。

    post模型有两个属性,作者和内容,这在当前的形式也被定义。对于all_tags一个属性将被添加到将表单数据,以及。在Rails 4,加入使用强参数所需的(虚拟的,在这种情况下)属性。虚拟属性是非常简单的,在这种情况下被定义为一个getter和setter方法。在函数是用于去除空白

    应用程序/模型/ post.rb

    <预的tabindex = “0” 类= “语言红宝石 ”> <代码类=“ 语言红宝石”> DEF all_tags =(地名)

    self.tags = names.split( “”)地图做|名称|

    Tag.where(名称:name.strip).first_or_create!

    结束

    结束

    高清all_tags

    self.tags.map(:名称)。加入( “”)

    该all_tags功能进行定制,以使所有用逗号分隔的标签。

    创建控制器和视图之前,请安装Zurb基金会:

    <预的tabindex = “0” 类= “语言的bash ”> <代码类=“ 语言的bash”>导轨克基础:安装

    现在,自定义绘制的职位包括所有的标签控制器和视图。通过创建应用程序输入/控制器/ posts_controller.rb:

    <预的tabindex = “0” 类= “语言的bash ”> <代码类=“ 语言的bash”>导轨克控制器帖子索引创建

    指定如下,包括我们的虚拟属性保留通过视图中输入的所有标签的强参数:

    <预的tabindex =“0”类=“语言红宝石‘> <代码类=’语言红宝石”>私人

    高清post_params

    params.require(:后).permit(:作者:内容:all_tags)

    许可证方法创建的参数的白名单被允许通过。在这里了解更多关于有关强参数

    让我们创建一个标签为文本字段的形式。我们将使用AJAX创建的帖子。这很简单:

    应用程序/视图/帖/ _new.html.erb <代码类=“ 语言红宝石 ”>

    <(%)=的form_for(Post.new,远程:真)做| F | %>

    <%= f.text_field:作者,占位符: “作者姓名” %>

    <%= f.text_area:内容,占位符: “您的消息”,行:5%>

    <%= f.text_field:all_tags,占位符: “标签用逗号分隔” %>

    <%= f.submit “后”,等级: “按钮” %>

    <%端%>

    <代码> __远程:真__ 是告诉形式通过AJAX而不是由浏览器的正常提交机构提交的属性。

    创建我们的帖子,<代码>之后创建会重定向到首页的动作并查看现有的职位。

    应用程序/控制器/ posts_controller.rb

    <预的tabindex =“0”类=“语言红宝石‘> <代码类=’语言红宝石”> DEF索引

    @posts = Post.all

    应用程序/视图/职位/ index.html.erb

    <预的tabindex = “0” 类= “语言红宝石 ”> <代码类=“ 语言红宝石 ”>

    <%=渲染部分: “帖/新” %>

    不要忘了处理的路线。

    配置/ routes.rb中

    <预的tabindex =“0”类=“语言红宝石‘> <代码类=’语言红宝石”>根的帖子#索引"

    资源:帖子,仅:[:创建

    添加一些非常简单的造型的观点如下:

    应用程序/资产/样式表/ posts.css.scss

    <预的tabindex = “0” 类= “语言-CSS ”> <代码类=“ 语言-CSS”>标记云{

    边距:16px的;

    填充:14px的;

    }

    .TOP垫{

    填充:25像素;

    }

    .glassy-BG {

    箱阴影:0像素3PX 8像素-4px RGBA(0,0,0,0.15);

    背景:白色;

    边界半径:4PX;

    填充底:12px的;

    }

    。公吨{

    边距:10px的;

    }

    .mb {

    边距:10px的;

    }

    .PT {

    填充顶:10px的;

    }

    .pb {

    填充底:10px的;

    }

    运行<代码>轨小号,然后让我们看看我们有什么。

    哎呀,有没有文章!我们从来没有写在创建的动作。

    Form for post

    应用程序/控制器/ posts_controller.rb

    <预的tabindex =“0”类=“语言红宝石‘> <代码类=’语言红宝石”> DEF创建

    @post = Post.new(post_params)

    respond_to代码做|格式|

    如果@ post.save

    format.js#将搜索create.js.erb

    其他

    format.html {渲染root_path}

    结束

    结束

    这段代码创建一个新的邮政与用户指定的参数,检查其是否有效,并返回结果。由于形式与AJAX提交时,响应格式为<代码> JS

    现在,我们需要创建create.js.erb文件来保存将创建的帖子后运行的JavaScript:

    应用程序/视图/职位/ create.js.erb

    <预的tabindex = “0” 类= “语言的javascript ”> <代码类=“ 语言的javascript ”>变种new_post = $(“<%= escape_javascript(渲染(部分:@post))%>”)。隐藏();

    $( "#帖子")预定(new_post)。

    $( "#交_ <(%)= @ post.id%>")淡入( "慢");

    $( "#new_post")[0] .reset段();

    该代码使得新创建的柱的局部视图,在前置函数允许它在旧柱的顶部呈现与<代码>淡入效果。

    创建一个部分,将呈现每个岗位:

    应用程序/视图/职位/ _post.html.erb

    <预的tabindex = “0” 类= “语言红宝石 ”> <代码类=“ 语言红宝石”> <(%)= div_for交做%>

    <(%)= H(post.author)%>

    从<%= time_ago_in_words(post.created_at)%>

    <(%)= H(post.content)%>

    <(%)=原始post.all_tags%>

    <%端%>

    之前我们检查输出,修改<代码>索引视图以保持局部职位:

    应用/视图/ index.html.erb

    <预的tabindex = “0” 类= “语言红宝石 ”> <代码类=“ 语言红宝石 ”>

    <%=渲染部分: “帖/新” %>

    <%=渲染部分:@ posts.reverse%>

    帖子会以相反的顺序从上到下,这意味着,最recenlty进入后会成为第一。

    在这个阶段,我们必须用两个表,标签和引用的Tagging存储在数据库中标记的帖子。该表的Tagging保存职位和标签之间的关联。下面是我们的帖子是这样的:

    基于标记的搜索

    posts

    在本节中,我们将创建的标签名基于范围的搜索。

    创建名为 tagged_with(名称)一类方法,其将采取指定的标记的名称和搜索与it.app/model/post.rb相关联的帖子

    <预的tabindex = “0” 类= “语言红宝石 ”> <代码类=“ 语言红宝石”> DEF self.tagged_with(名称)

    Tag.find_by_name!(名).posts

    创建一个实例变量保存在控制器上的结果。

    应用程序/控制器/ posts_controller.rb

    <预的tabindex =“0”类=“语言红宝石‘> <代码类=’语言红宝石”> DEF索引

    如果PARAMS [:标签]

    @posts = Post.tagged_with(PARAMS [:标签])

    其他

    @posts = Post.all

    结束

    添加<代码>获得的路线并保持标签名称和点到 posts_controller#指数方法:

    配置/ routes.rb中

    <预的tabindex =“0”类=“语言红宝石‘> <代码类=’语言红宝石”>得到‘标签/:标签’,到:‘帖子#索引’,如:‘标签’

    在此之后,改变每个岗位的标签是链接到“索引”的方法,具体如下:

    应用/视图/ _post.html.erb

    <预的tabindex = “0” 类= “语言红宝石 ”> <代码类=“ 语言红宝石”> <(%)=原始tag_links(post.all_tags)%>

    <代码> tag_links(标签)是一个辅助方法,该方法将持有转换标签链接的逻辑。

    应用程序/佣工/ posts_helper.rb

    <预的tabindex = “0” 类= “语言红宝石 ”> <代码类=“ 语言红宝石”> DEF tag_links(标签)

    tags.split( “”){地图|。标签|的link_to tag.strip,tag_path(tag.strip)}。加入( “”)

    好极了!现在,我们有我们的帖子基于标签的搜索!

    标签云

    让我们基于计算出现的数量在所有职位每个标签那些很酷的标签云中的一个。

    tag-based search

    首先,创建一个方法来计算与职位相关联的所有标签:

    应用程序/模型/ tag.rb

    <预的tabindex = “0” 类= “语言红宝石 ”> <代码类=“ 语言红宝石”> DEF self.counts

    。self.select( “名称,计数(taggings.tag_id)作为计数”)加入(:引用的Tagging)。集团( “taggings.tag_id”)

    从这个的Tagging查询组匹配的<代码> tag_ids 加入表和计数它们。

    我们将通过创建名为 tag_cloud 的一个辅助方法,它需要调用的计数函数和CSS类的结果,根据自己的计数样式。

    应用程序/佣工/ posts_helper.rb

    <预的tabindex = “0” 类= “语言红宝石 ”> <代码类=“ 语言红宝石”> DEF tag_cloud(标记,班)

    最大= tags.sort_by(&:计数)。去年

    tags.each办|标签|

    指数= tag.count.to_f / max.count *(classes.size-1)

    产率(标签,类[index.round])

    结束

    这种辅助方法,将获得与最大计数的标签。然后,它循环在每个标签计算<代码>索引这将根据舍入的值选择的CSS类。然后,通过块将被执行。

    我们需要添加样式不同尺寸如下:

    应用程序/资产/ tags.css.scss

    <预的tabindex = “0” 类= “语言-CSS ”> <代码类=“ 语言-CSS”> CSS1 {字体大小:1.0em;}

    .css2 {字体大小:1.2em;}

    .css3 {字体大小:1.4em;}

    .css4 {字体大小:1.6em;}

    不要忘记添加<代码> * =需要标记到application.css。

    最后,添加代码,以在视图中显示的标签和CSS类适用于他们。

    应用程序/视图/职位/ index.html.erb

    <预的tabindex = “0” 类= “语言红宝石 ”> <代码类=“ 语言红宝石 ”>

    标签云

    <%tag_cloud Tag.counts,%W {CSS1 CSS2 CSS3 CSS4}办|标签,css_class | %>

    <(%)=的link_to tag.name,tag_path(tag.name),类:css_class%>

    <%端%>

    检查出来,我们的标签是浮云!

    actastaggable_on

    这篇文章后,您应该能够处理act_as_taggable_on宝石没有问题。你可以阅读更多关于它在它的github回购。

    tag cloud

    结论

    我希望本教程帮助您了解什么进入创建一个基本的标签系统。标签,就是你! :)


    以上信息来源于网络,如有侵权,请联系站长删除。

    TAG:标记 划痕 导轨

  • 上一篇:GDB 调试 .NET 程序实录
  • 与“从头Rails的标记”相关的资讯
  • 参议院委员会举行标志,为人民法案,一个有争议的投票法案
  • 标记冠状病毒错误信息推文改变了用户行为,新的研究表明
  • JVM垃圾回收之三色标记
  • 高德/腾讯地图API实现自定义标记点和事件
  • MPB:EGFP荧光标记大肠杆菌的构建