homeland 0.0.9 → 1.0.0.beta2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/MIT-LICENSE +20 -0
- data/README.md +139 -43
- data/Rakefile +23 -0
- data/app/assets/javascripts/homeland/application.coffee +31 -0
- data/app/assets/javascripts/homeland/bootstrap.min.js +7 -0
- data/{lib/generators/homeland/install/templates/javascripts → app/assets/javascripts/homeland}/jquery.timeago.js +13 -13
- data/app/assets/javascripts/homeland/tether.min.js +1 -0
- data/app/assets/stylesheets/homeland/application.scss +114 -0
- data/app/assets/stylesheets/homeland/bootstrap-theme.scss +165 -0
- data/app/assets/stylesheets/homeland/bootstrap.min.css +5 -0
- data/app/assets/stylesheets/homeland/markdown.scss +13 -0
- data/app/assets/stylesheets/homeland/tether.min.css +1 -0
- data/app/controllers/homeland/application_controller.rb +37 -12
- data/app/controllers/homeland/replies_controller.rb +25 -11
- data/app/controllers/homeland/topics_controller.rb +50 -58
- data/app/helpers/homeland/application_helper.rb +45 -13
- data/app/models/homeland/concerns/markdown_body.rb +17 -0
- data/app/models/homeland/concerns/pagination.rb +14 -0
- data/app/models/homeland/concerns/soft_delete.rb +29 -0
- data/app/models/homeland/concerns/user_methods.rb +23 -0
- data/app/models/homeland/node.rb +10 -25
- data/app/models/homeland/reply.rb +16 -17
- data/app/models/homeland/topic.rb +19 -29
- data/app/views/homeland/replies/_reply.html.erb +35 -0
- data/app/views/homeland/replies/edit.html.erb +17 -27
- data/app/views/homeland/shared/_error_messages.html.erb +2 -4
- data/app/views/homeland/topics/_form.html.erb +21 -24
- data/app/views/homeland/topics/_node_info.html.erb +9 -0
- data/app/views/homeland/topics/_reply_form.html.erb +16 -0
- data/app/views/homeland/topics/_topic.html.erb +17 -26
- data/app/views/homeland/topics/edit.html.erb +6 -10
- data/app/views/homeland/topics/index.html.erb +28 -51
- data/app/views/homeland/topics/new.html.erb +5 -10
- data/app/views/homeland/topics/show.html.erb +16 -89
- data/app/views/layouts/homeland/application.html.erb +42 -0
- data/config/locales/homeland.en.yml +40 -0
- data/config/locales/homeland.zh-CN.yml +8 -0
- data/config/routes.rb +6 -8
- data/db/migrate/20160321125035_create_homeland_nodes.rb +15 -0
- data/db/migrate/20160321125610_create_homeland_topics.rb +25 -0
- data/db/migrate/20160321125920_create_homeland_replies.rb +16 -0
- data/db/migrate/20160322062228_add_reply_to_id_to_replies.rb +7 -0
- data/lib/generators/homeland/controllers_generator.rb +14 -0
- data/lib/generators/homeland/i18n_generator.rb +22 -0
- data/lib/generators/homeland/install_generator.rb +8 -54
- data/lib/generators/homeland/templates/config/initializers/homeland.rb +34 -0
- data/lib/generators/homeland/views_generator.rb +3 -10
- data/lib/homeland.rb +29 -3
- data/lib/homeland/action_view/will_paginate.rb +38 -0
- data/lib/homeland/configuration.rb +66 -0
- data/lib/homeland/engine.rb +4 -27
- data/lib/homeland/markup.rb +17 -0
- data/lib/homeland/markup/base.rb +11 -0
- data/lib/homeland/markup/html.rb +12 -0
- data/lib/homeland/markup/markdown.rb +17 -0
- data/lib/homeland/markup/simple.rb +14 -0
- data/lib/homeland/version.rb +3 -0
- data/lib/tasks/homeland_tasks.rake +4 -0
- metadata +119 -38
- data/Changelogs.md +0 -29
- data/app/assets/images/reply.png +0 -0
- data/app/assets/javascripts/homeland.coffee +0 -51
- data/app/assets/stylesheets/homeland.scss +0 -100
- data/app/helpers/homeland/topics_helper.rb +0 -14
- data/app/models/homeland/section.rb +0 -21
- data/app/views/homeland/topics/_base.html.erb +0 -4
- data/app/views/homeland/topics/_sidebar.html.erb +0 -49
- data/app/views/homeland/topics/feed.builder +0 -20
- data/lib/generators/homeland/install/templates/images/jquery.chosen.png +0 -0
- data/lib/generators/homeland/install/templates/initializer.rb +0 -8
- data/lib/generators/homeland/install/templates/javascripts/jquery.chosen.js +0 -898
- data/lib/generators/homeland/install/templates/javascripts/jquery.hotkeys.js +0 -99
- data/lib/generators/homeland/install/templates/locales/homeland.zh-CN.yml +0 -14
- data/lib/generators/homeland/install/templates/stylesheets/jquery.chosen.scss +0 -367
- data/lib/homeland/setting.rb +0 -37
@@ -0,0 +1,9 @@
|
|
1
|
+
<% if @node %>
|
2
|
+
<div class="card">
|
3
|
+
<div class="card-block">
|
4
|
+
<h4 class="card-title"><%= node_tag(@node) %></h4>
|
5
|
+
<p class="card-text"><%= simple_format @node.description %></p>
|
6
|
+
<a href="<%= homeland.new_topic_path %>" class="btn btn-primary"><%= t('homeland.nav.new') %></a>
|
7
|
+
</div>
|
8
|
+
</div>
|
9
|
+
<% end %>
|
@@ -0,0 +1,16 @@
|
|
1
|
+
<nav id="reply-panel">
|
2
|
+
<div class="container">
|
3
|
+
<%= form_for(Homeland::Reply.new, url: reply_topic_path(@topic.id)) do |f| %>
|
4
|
+
<%= f.hidden_field :reply_to_id %>
|
5
|
+
|
6
|
+
<div class="row">
|
7
|
+
<div class="col-sm-8">
|
8
|
+
<%= f.text_area :body, class: 'form-control', rows: 5, placeholder: t('homeland.topics.type_reply') %>
|
9
|
+
</div>
|
10
|
+
<div class="col-sm-2">
|
11
|
+
<button type="submit" class="btn btn-primary"><%= t('homeland.submit') %></button>
|
12
|
+
</div>
|
13
|
+
</div>
|
14
|
+
<% end %>
|
15
|
+
</div>
|
16
|
+
</nav>
|
@@ -1,26 +1,17 @@
|
|
1
|
-
<
|
2
|
-
<
|
3
|
-
|
4
|
-
</
|
5
|
-
<
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
<% if topic.last_reply_user.blank? %>
|
19
|
-
发布于 <%= timeago(topic.created_at) %>
|
20
|
-
<% else %>
|
21
|
-
最后由 <%= user_name_tag(topic.last_reply_user) %> 回复于 <%= timeago(topic.replied_at) %>
|
22
|
-
<% end %>
|
23
|
-
</div>
|
24
|
-
</div>
|
25
|
-
</div>
|
26
|
-
</div>
|
1
|
+
<tr class="topic">
|
2
|
+
<td class="title">
|
3
|
+
<%= link_to topic.title, homeland.topic_path(topic) %>
|
4
|
+
</td>
|
5
|
+
<td class="node">
|
6
|
+
<%= node_tag(topic.node) %>
|
7
|
+
</td>
|
8
|
+
<td class="author">
|
9
|
+
<%= user_avatar_tag(topic) %>
|
10
|
+
</td>
|
11
|
+
<td class="replies">
|
12
|
+
<%= topic.replies_count %>
|
13
|
+
</td>
|
14
|
+
<td class="activity">
|
15
|
+
<%= timeago topic.activity_at %>
|
16
|
+
</td>
|
17
|
+
</tr>
|
@@ -1,11 +1,7 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
<li
|
4
|
-
|
1
|
+
<ol class="breadcrumb">
|
2
|
+
<li><a href="<%= homeland.root_path %>"><%= t('homeland.nav.home') %></a></li>
|
3
|
+
<li><a href="<%= homeland.topic_path(@topic) %>" title="<%= @topic.title %>"><%= truncate @topic.title, length: 20 %></a></li>
|
4
|
+
<li class="active"><%= t('homeland.nav.edit') %></li>
|
5
|
+
</ol>
|
5
6
|
|
6
|
-
<%= render '
|
7
|
-
<div class="content">
|
8
|
-
<div class="box">
|
9
|
-
<%= render 'form' %>
|
10
|
-
</div>
|
11
|
-
</div>
|
7
|
+
<%= render 'form' %>
|
@@ -1,53 +1,30 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
<% if @node.blank? %>
|
4
|
-
<li>首页</li>
|
5
|
-
<% else %>
|
6
|
-
<li><%= @node.name %></li>
|
7
|
-
<% end %>
|
8
|
-
<% end %>
|
9
|
-
<%= render 'sidebar' %>
|
1
|
+
<div class="topics">
|
2
|
+
<%= render 'node_info' %>
|
10
3
|
|
11
|
-
<
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
<
|
17
|
-
<
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
<% if params[:action] == "index" %>
|
36
|
-
<div id="sections" class="box">
|
37
|
-
<h2>节点分类导航</h2>
|
38
|
-
<ul>
|
39
|
-
<% @sections.each do |section| %>
|
40
|
-
<li>
|
41
|
-
<label><%= section.name %></label>
|
42
|
-
<div class="items">
|
43
|
-
<% section.nodes.each do |node| %>
|
44
|
-
<a href="<%= node_topics_path(node.id) %>" title="<%= node.name %>"><%= node.name %></a>
|
45
|
-
<% end %>
|
46
|
-
</div>
|
47
|
-
</li>
|
48
|
-
<% end %>
|
49
|
-
</ul>
|
50
|
-
</div>
|
51
|
-
<% end %>
|
52
|
-
</div>
|
4
|
+
<table class="table">
|
5
|
+
<thead class="thead-default">
|
6
|
+
<tr class="topic">
|
7
|
+
<th class="title"><%= t('activerecord.attributes.homeland/topic.title')%></th>
|
8
|
+
<th class="node"><%= t('activerecord.attributes.homeland/topic.node')%></th>
|
9
|
+
<th class="author"><%= t('activerecord.attributes.homeland/topic.user')%></th>
|
10
|
+
<th class="replies"><%= t('activerecord.attributes.homeland/topic.replies_count')%></th>
|
11
|
+
<th class="activity"><%= t('activerecord.attributes.homeland/topic.activity')%></th>
|
12
|
+
</tr>
|
13
|
+
</thad>
|
14
|
+
<tbody>
|
15
|
+
<% if @topics.blank? %>
|
16
|
+
<tr>
|
17
|
+
<th>
|
18
|
+
<span class="text-mutted">
|
19
|
+
<%= t('homeland.topics.empty') %>
|
20
|
+
</span>
|
21
|
+
</td>
|
22
|
+
</tr>
|
23
|
+
<% else %>
|
24
|
+
<%= render @topics %>
|
25
|
+
<% end %>
|
26
|
+
</tbody>
|
27
|
+
</table>
|
53
28
|
|
29
|
+
<%= homeland_paginate @topics %>
|
30
|
+
</div>
|
@@ -1,11 +1,6 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
<li class="active"
|
4
|
-
|
1
|
+
<ol class="breadcrumb">
|
2
|
+
<li><a href="<%= homeland.root_path %>"><%= t('homeland.nav.home') %></a></li>
|
3
|
+
<li class="active"><%= t('homeland.nav.new') %></li>
|
4
|
+
</ol>
|
5
5
|
|
6
|
-
<%= render '
|
7
|
-
<div class="content">
|
8
|
-
<div class="box">
|
9
|
-
<%= render 'form' %>
|
10
|
-
</div>
|
11
|
-
</div>
|
6
|
+
<%= render 'form' %>
|
@@ -1,94 +1,21 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
<%=
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
<%= user_avatar_tag(@topic.user) %>
|
11
|
-
</div>
|
12
|
-
<div class="infos">
|
13
|
-
<h1><%= truncate(@topic.title, :length => 100) %></h1>
|
14
|
-
<div class="info leader">
|
15
|
-
由 <%= user_name_tag(@topic.user) %>
|
16
|
-
在 <a href="<%= node_topics_path(@topic.node_id) %>"><%= @topic.node.name %></a> 节点中发起
|
17
|
-
</div>
|
18
|
-
<div class="info time">
|
19
|
-
<% if @topic.last_reply_user.blank? %>
|
20
|
-
发布于 <%= timeago(@topic.created_at) %>
|
21
|
-
<% else %>
|
22
|
-
最后由 <%= user_name_tag(@topic.last_reply_user) %> 回复于 <%= timeago(@topic.replied_at) %>
|
23
|
-
<% end %>
|
24
|
-
</div>
|
25
|
-
</div>
|
26
|
-
</div>
|
27
|
-
<div class="body">
|
28
|
-
<%= format_topic_body(@topic.body) %>
|
29
|
-
</div>
|
30
|
-
<div class="tools">
|
31
|
-
<% if owner?(@topic) %>
|
32
|
-
<a href="<%= edit_topic_path(@topic.id) %>">修改</a>
|
33
|
-
<%= link_to "删除", topic_path(@topic.id), :method => :delete, :confirm => "确定要删除么?" %>
|
34
|
-
<% end %>
|
35
|
-
</div>
|
36
|
-
</div>
|
37
|
-
<% if @replies.blank? %>
|
38
|
-
<div class="no_result">
|
39
|
-
暂无回复。
|
1
|
+
<div class="row">
|
2
|
+
<div class="topic-detail col-lg-9">
|
3
|
+
<h1>
|
4
|
+
<%= @topic.title %>
|
5
|
+
<%= node_tag(@topic.node) %>
|
6
|
+
</h1>
|
7
|
+
|
8
|
+
<div class="topic-content">
|
9
|
+
<%= render partial: 'homeland/replies/reply', locals: { reply: @topic } %>
|
40
10
|
</div>
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
截止 <%= l @topic.replied_at, :format => :long %>, 共收到 <%= @topic.replies_count %> 条回复
|
11
|
+
|
12
|
+
<div class="replies">
|
13
|
+
<%= render @replies %>
|
45
14
|
</div>
|
46
|
-
<% @replies.each_with_index do |reply,i| %>
|
47
|
-
<div class="reply" id="reply<%= i + 1 %>">
|
48
|
-
<div class="pull-left face"><%= user_avatar_tag(reply.user) %></div>
|
49
|
-
<div class="infos">
|
50
|
-
<div class="info clearfix">
|
51
|
-
<span class="name"><%= user_name_tag(reply.user) %></span>
|
52
|
-
<span class="time"><%= i + 1 %>楼, 回复于 <%= timeago(reply.created_at) %>
|
53
|
-
<% if owner?(reply) %>
|
54
|
-
<a href="<%= edit_reply_path(reply.id) %>">修改</a>
|
55
|
-
<% end %>
|
56
|
-
</span>
|
57
|
-
</div>
|
58
|
-
<div class="body">
|
59
|
-
<%= format_topic_body(reply.body) %>
|
60
|
-
</div>
|
61
|
-
</div>
|
62
|
-
</div>
|
63
|
-
<% end %>
|
64
|
-
<script type="text/javascript">
|
65
|
-
$(document).ready(function(){
|
66
|
-
atDatas = []
|
67
|
-
$(".reply .name a").text(function(idx,text) { atDatas.push(text) });
|
68
|
-
$('#reply_body').atWho("@",{'data':atDatas});
|
69
|
-
})
|
70
|
-
</script>
|
71
|
-
</div>
|
72
|
-
<% end %>
|
73
|
-
<% if current_user %>
|
74
|
-
<div id="reply" class="form box">
|
75
|
-
<h4>回复</h4>
|
76
|
-
<%= form_for(Homeland::Reply.new,:url => reply_topic_path(params[:id])) do |f| %>
|
77
|
-
<div class="pull-right">
|
78
|
-
<button type="submit" class="btn btn-primary">提交回复</button><br />
|
79
|
-
<span class="help-inline">Ctrl+Enter</span>
|
80
|
-
</div>
|
81
|
-
<div class="clearfix">
|
82
|
-
<%= f.text_area :body,:class => "span10", :rows => "4" %>
|
83
|
-
</div>
|
84
15
|
|
85
|
-
<% end %>
|
86
16
|
</div>
|
87
|
-
|
88
|
-
|
89
|
-
<div style="padding:20px;">
|
90
|
-
需要 <a href='/account/sign_in' class="btn btn-primary">登录</a> 后回复方可回复, 如果你还没有账号 <a href="/account/sign_up" class="btn btn-success"> 点击这里注册</a>。
|
91
|
-
</div>
|
92
|
-
</div>
|
93
|
-
<% end %>
|
17
|
+
|
18
|
+
|
94
19
|
</div>
|
20
|
+
|
21
|
+
<%= render 'reply_form' %>
|
@@ -0,0 +1,42 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<title><%= @page_title %></title>
|
5
|
+
<%= stylesheet_link_tag "homeland/application", media: "all" %>
|
6
|
+
<%= javascript_include_tag "homeland/application" %>
|
7
|
+
<%= csrf_meta_tags %>
|
8
|
+
</head>
|
9
|
+
<body>
|
10
|
+
|
11
|
+
<nav class="navbar navbar-light bg-faded">
|
12
|
+
<div class="container">
|
13
|
+
<a class="navbar-brand" href="<%= main_app.root_path %>"><%= t('homeland.nav.home') %></a>
|
14
|
+
<ul class="nav navbar-nav main-nav">
|
15
|
+
<li class="nav-item<%= ' active' if controller_name == 'topics' and action_name == 'index' %>">
|
16
|
+
<a class="nav-link" href="<%= homeland.root_path %>"><%= t('homeland.nav.latest') %></a>
|
17
|
+
</li>
|
18
|
+
<li class="nav-item<%= ' active' if controller_name == 'topics' and action_name == 'features' %>">
|
19
|
+
<a class="nav-link" href="<%= homeland.features_topics_path %>"><%= t('homeland.nav.features') %></a>
|
20
|
+
</li>
|
21
|
+
<li class="nav-item<%= ' active' if controller_name == 'topics' and action_name == 'recent' %>">
|
22
|
+
<a class="nav-link" href="<%= homeland.recent_topics_path %>"><%= t('homeland.nav.recent') %></a>
|
23
|
+
</li>
|
24
|
+
</ul>
|
25
|
+
<ul class="nav navbar-nav pull-xs-right">
|
26
|
+
<li class="nav-item<%= ' active' if controller_name == 'topics' and action_name == 'new' %>">
|
27
|
+
<a class="btn btn-primary-outline" href="<%= homeland.new_topic_path %>"><i class="fa fa-plus"></i> <%= t('homeland.nav.new') %></a>
|
28
|
+
</li>
|
29
|
+
</ul>
|
30
|
+
</div>
|
31
|
+
</nav>
|
32
|
+
|
33
|
+
<div class="main-layout">
|
34
|
+
<div class="container">
|
35
|
+
<%= notice_message %>
|
36
|
+
|
37
|
+
<%= yield %>
|
38
|
+
</div>
|
39
|
+
</div>
|
40
|
+
|
41
|
+
</body>
|
42
|
+
</html>
|
@@ -0,0 +1,40 @@
|
|
1
|
+
en:
|
2
|
+
activerecord:
|
3
|
+
models:
|
4
|
+
homeland/topic: "Topic"
|
5
|
+
homeland/reply: "Reply"
|
6
|
+
attributes:
|
7
|
+
homeland/topic:
|
8
|
+
title: "Subject"
|
9
|
+
body: "Content"
|
10
|
+
node: "Channel"
|
11
|
+
replies_count: "Replies"
|
12
|
+
user: "Author"
|
13
|
+
activity: "Activity"
|
14
|
+
homeland/reply:
|
15
|
+
body: "Content"
|
16
|
+
homeland:
|
17
|
+
nav:
|
18
|
+
home: 'Homeland'
|
19
|
+
latest: 'Latest'
|
20
|
+
features: 'Features'
|
21
|
+
recent: 'Recent'
|
22
|
+
node: "Channel"
|
23
|
+
new: "New Topic"
|
24
|
+
edit: 'Edit'
|
25
|
+
topics:
|
26
|
+
empty: 'Ther have no subject created.'
|
27
|
+
type_reply: 'Write your reply here...'
|
28
|
+
reply_to: "Reply To"
|
29
|
+
submiting: 'Submiting...'
|
30
|
+
submit: 'Submit'
|
31
|
+
cancel: 'Cancel'
|
32
|
+
reply: 'Reply'
|
33
|
+
access_denied: "Access denied."
|
34
|
+
are_you_sure_to_delete: "Are you sure to delete?"
|
35
|
+
topic_created: "Topic created success."
|
36
|
+
topic_updated: "Topic updated success."
|
37
|
+
topic_deleted: "Topic deleted success."
|
38
|
+
reply_created: "Reply created success."
|
39
|
+
reply_deleted: "Reply deleted success."
|
40
|
+
reply_updated: "Reply updated success."
|
data/config/routes.rb
CHANGED
@@ -1,16 +1,14 @@
|
|
1
1
|
Homeland::Engine.routes.draw do
|
2
|
-
root :
|
3
|
-
get
|
4
|
-
resources :topics do
|
2
|
+
root to: 'topics#index'
|
3
|
+
get 'c/:id', to: 'topics#node', as: :node_topics
|
4
|
+
resources :topics, path: 't' do
|
5
5
|
member do
|
6
6
|
post :reply
|
7
7
|
end
|
8
8
|
collection do
|
9
|
-
get :node
|
10
|
-
get :search
|
11
|
-
get :feed
|
12
9
|
get :recent
|
10
|
+
get :features
|
13
11
|
end
|
14
12
|
end
|
15
|
-
resources :replies
|
16
|
-
end
|
13
|
+
resources :replies, path: 'r'
|
14
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
class CreateHomelandNodes < ActiveRecord::Migration
|
2
|
+
def change
|
3
|
+
create_table :homeland_nodes do |t|
|
4
|
+
t.string :name, null: false
|
5
|
+
t.string :description
|
6
|
+
t.string :color
|
7
|
+
t.integer :sort, default: 0, null: false
|
8
|
+
t.integer :topics_count, null: false, default: 0
|
9
|
+
|
10
|
+
t.timestamps null: false
|
11
|
+
end
|
12
|
+
|
13
|
+
add_index :homeland_nodes, 'sort'
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
class CreateHomelandTopics < ActiveRecord::Migration
|
2
|
+
def change
|
3
|
+
create_table :homeland_topics do |t|
|
4
|
+
t.integer :node_id, null: false
|
5
|
+
t.integer :user_id, null: false
|
6
|
+
t.string :title, null: false
|
7
|
+
t.text :body
|
8
|
+
t.text :body_html
|
9
|
+
t.integer :last_reply_id
|
10
|
+
t.integer :last_reply_user_id
|
11
|
+
t.integer :last_active_mark, null: false, default: 0
|
12
|
+
t.datetime :replied_at
|
13
|
+
t.integer :replies_count, null: false, default: 0
|
14
|
+
t.datetime :deleted_at
|
15
|
+
|
16
|
+
t.timestamps null: false
|
17
|
+
end
|
18
|
+
|
19
|
+
add_index :homeland_topics, :deleted_at
|
20
|
+
add_index :homeland_topics, [:node_id, :deleted_at]
|
21
|
+
add_index :homeland_topics, :user_id
|
22
|
+
add_index :homeland_topics, [:last_active_mark, :deleted_at]
|
23
|
+
add_index :homeland_topics, [:node_id, :last_active_mark]
|
24
|
+
end
|
25
|
+
end
|