bwo*_*bst 2 ruby ruby-on-rails
我正在阅读Blogger教程的"标签"部分,我对一部分感到困惑:def to_s函数(在tag.rb中); 为什么需要它以及如何包含它.
我已经为相关文件中包含了相关文件的一些相关部分.
楷模
article.rb
class Article < ActiveRecord::Base
attr_accessible :tag_list
has_many :taggings
has_many :tags, through: :taggings
def tag_list
return self.tags.collect do |tag|
tag.name
end.join(", ")
end
def tag_list=(tags_string)
self.taggings.destroy_all
tag_names = tags_string.split(",").collect{|s| s.strip.downcase}.uniq
tag_names.each do |tag_name|
tag = Tag.find_or_create_by_name(tag_name)
tagging = self.taggings.new
tagging.tag_id = tag.id
end
end
end
Run Code Online (Sandbox Code Playgroud)
tag.rb
class Tag < ActiveRecord::Base
has_many :taggings
has_many :articles, through: :taggings
def to_s
name
end
end
Run Code Online (Sandbox Code Playgroud)
tagging.rb
class Tagging < ActiveRecord::Base
belongs_to :tag
belongs_to :article
end
Run Code Online (Sandbox Code Playgroud)
CONTROLLERS
tags_controller.rb
class TagsController < ApplicationController
def index
@tags = Tag.all
end
def show
@tag = Tag.find(params[:id])
end
def destroy
@tag = Tag.find(params[:id]).destroy
redirect_to :back
end
end
Run Code Online (Sandbox Code Playgroud)
助手
articles_helper.rb
module ArticlesHelper
def tag_links(tags)
links = tags.collect{|tag| link_to tag.name, tag_path(tag)}
return links.join(", ").html_safe
end
end
Run Code Online (Sandbox Code Playgroud)
VIEWS
new.html.erb
<%= form_for(@article, html: {multipart: true}) do |f| %>
<p>
<%= f.label :tag_list %>
<%= f.text_field :tag_list %>
</p>
<p>
<%= f.submit %>
</p>
<% end %>
Run Code Online (Sandbox Code Playgroud)
show.html.erb
标签: <%= tag_links(@article.tags) %>
我明白了你的意思.当您在字符串中连接值时,您必须编写例如
"hello #{@user.name}"
Run Code Online (Sandbox Code Playgroud)
因此,不是调用@ user.name你可以指定任何你必须显示用户的字符串,你可以直接在to_s方法中指定,这样你就不需要再次调用.to_s了
"hello #{@user}"
Run Code Online (Sandbox Code Playgroud)
上面的代码行搜索@ user类的.to_s方法和打印返回值.
同样适用于路由
user_path(@user)
Run Code Online (Sandbox Code Playgroud)
会给你>> users/123 #,其中123是@user的id
如果你写
def to_params
self.name
end
Run Code Online (Sandbox Code Playgroud)
然后它会给>> users/john#,其中john是@用户的名字
| 归档时间: |
|
| 查看次数: |
7650 次 |
| 最近记录: |