Commit ed1d811a by tady

app main view, ajax

parent 80ded97f
...@@ -48,3 +48,5 @@ end ...@@ -48,3 +48,5 @@ end
gem 'devise' gem 'devise'
gem 'omniauth-google-oauth2' gem 'omniauth-google-oauth2'
gem 'redcarpet'
...@@ -99,6 +99,7 @@ GEM ...@@ -99,6 +99,7 @@ GEM
rake (10.1.0) rake (10.1.0)
rdoc (3.12.2) rdoc (3.12.2)
json (~> 1.4) json (~> 1.4)
redcarpet (3.0.0)
sass (3.2.12) sass (3.2.12)
sass-rails (4.0.1) sass-rails (4.0.1)
railties (>= 4.0.0, < 5.0) railties (>= 4.0.0, < 5.0)
...@@ -142,6 +143,7 @@ DEPENDENCIES ...@@ -142,6 +143,7 @@ DEPENDENCIES
jbuilder (~> 1.2) jbuilder (~> 1.2)
omniauth-google-oauth2 omniauth-google-oauth2
rails (= 4.0.1) rails (= 4.0.1)
redcarpet
sass-rails (~> 4.0.0) sass-rails (~> 4.0.0)
sdoc sdoc
sqlite3 sqlite3
......
...@@ -13,4 +13,49 @@ ...@@ -13,4 +13,49 @@
// require jquery // require jquery
// require jquery_ujs // require jquery_ujs
//= require turbolinks //= require turbolinks
//= require_tree ./lib
//= require_tree . //= require_tree .
// Automaticaly change textarea height.
$(document).ready(function(){
$('textarea.autosize').autosize();
});
// Preview post.
$(document).ready(function(){
var load_preview = function(){
var text = $('#post_body').val();
var csrfToken = $('meta[name="csrf-token"]').attr('content');
$.post('/posts/preview.api', {
"text": text,
"authenticity_token": csrfToken
})
.done(function(data){
$('#post_preview').html(data);
})
};
$('#post_body').on('keyup mouseup', load_preview);
load_preview();
});
// post list
$(document).ready(function(){
$('.post-list').on('click', function(e){
e.preventDefault();
$this = $(this);
$this.siblings().removeClass('active');
$this.addClass('active');
var id = $this.data('postId');
$.get('/posts/show_fragment', {
"id": id,
})
.done(function(data){
$('#list_post').html(data);
})
})
});
/*!
Autosize v1.18.1 - 2013-11-05
Automatically adjust textarea height based on user input.
(c) 2013 Jack Moore - http://www.jacklmoore.com/autosize
license: http://www.opensource.org/licenses/mit-license.php
*/
(function(e){var t,o={className:"autosizejs",append:"",callback:!1,resizeDelay:10},i='<textarea tabindex="-1" style="position:absolute; top:-999px; left:0; right:auto; bottom:auto; border:0; padding: 0; -moz-box-sizing:content-box; -webkit-box-sizing:content-box; box-sizing:content-box; word-wrap:break-word; height:0 !important; min-height:0 !important; overflow:hidden; transition:none; -webkit-transition:none; -moz-transition:none;"/>',n=["fontFamily","fontSize","fontWeight","fontStyle","letterSpacing","textTransform","wordSpacing","textIndent"],s=e(i).data("autosize",!0)[0];s.style.lineHeight="99px","99px"===e(s).css("lineHeight")&&n.push("lineHeight"),s.style.lineHeight="",e.fn.autosize=function(i){return this.length?(i=e.extend({},o,i||{}),s.parentNode!==document.body&&e(document.body).append(s),this.each(function(){function o(){var t,o;"getComputedStyle"in window?(t=window.getComputedStyle(u,null),o=u.getBoundingClientRect().width,e.each(["paddingLeft","paddingRight","borderLeftWidth","borderRightWidth"],function(e,i){o-=parseInt(t[i],10)}),s.style.width=o+"px"):s.style.width=Math.max(p.width(),0)+"px"}function a(){var a={};if(t=u,s.className=i.className,d=parseInt(p.css("maxHeight"),10),e.each(n,function(e,t){a[t]=p.css(t)}),e(s).css(a),o(),window.chrome){var r=u.style.width;u.style.width="0px",u.offsetWidth,u.style.width=r}}function r(){var e,n;t!==u?a():o(),s.value=u.value+i.append,s.style.overflowY=u.style.overflowY,n=parseInt(u.style.height,10),s.scrollTop=0,s.scrollTop=9e4,e=s.scrollTop,d&&e>d?(u.style.overflowY="scroll",e=d):(u.style.overflowY="hidden",c>e&&(e=c)),e+=w,n!==e&&(u.style.height=e+"px",f&&i.callback.call(u,u))}function l(){clearTimeout(h),h=setTimeout(function(){var e=p.width();e!==g&&(g=e,r())},parseInt(i.resizeDelay,10))}var d,c,h,u=this,p=e(u),w=0,f=e.isFunction(i.callback),z={height:u.style.height,overflow:u.style.overflow,overflowY:u.style.overflowY,wordWrap:u.style.wordWrap,resize:u.style.resize},g=p.width();p.data("autosize")||(p.data("autosize",!0),("border-box"===p.css("box-sizing")||"border-box"===p.css("-moz-box-sizing")||"border-box"===p.css("-webkit-box-sizing"))&&(w=p.outerHeight()-p.height()),c=Math.max(parseInt(p.css("minHeight"),10)-w||0,p.height()),p.css({overflow:"hidden",overflowY:"hidden",wordWrap:"break-word",resize:"none"===p.css("resize")||"vertical"===p.css("resize")?"none":"horizontal"}),"onpropertychange"in u?"oninput"in u?p.on("input.autosize keyup.autosize",r):p.on("propertychange.autosize",function(){"value"===event.propertyName&&r()}):p.on("input.autosize",r),i.resizeDelay!==!1&&e(window).on("resize.autosize",l),p.on("autosize.resize",r),p.on("autosize.resizeIncludeStyle",function(){t=null,r()}),p.on("autosize.destroy",function(){t=null,clearTimeout(h),e(window).off("resize",l),p.off("autosize").off(".autosize").css(z).removeData("autosize")}),r())})):this}})(window.jQuery||window.$);
\ No newline at end of file
...@@ -3,13 +3,20 @@ ...@@ -3,13 +3,20 @@
// You can use Sass (SCSS) here: http://sass-lang.com/ // You can use Sass (SCSS) here: http://sass-lang.com/
.app { .app {
padding-top: 70px; padding-top: 70px;
.navbar-default .navbar-brand{ .navbar-default .navbar-brand {
background-color: #428bca; background-color: #428bca;
color: #fff; color: #fff;
} }
/* .navbar-default a.btn, .navbar-default a.btn:hover{
padding: 10px 20px;
color: #fff;
margin-top: 6px;
}
*/
.box-text { .box-text {
padding: 9px 14px; padding: 9px 14px;
margin-left: 0; margin-left: 0;
...@@ -30,9 +37,63 @@ ...@@ -30,9 +37,63 @@
border-radius: 4px; border-radius: 4px;
} }
.box-text + .box-highlight{ .box-text + .box-highlight {
border-top-left-radius: 0px; border-top-left-radius: 0px;
border-top-right-radius: 0px; border-top-right-radius: 0px;
} }
/* home#show
-------------------------------------------------- */
.text-box {
padding: 9px 14px;
border: 1px solid #e1e1e8;
border-radius: 4px;
}
.text-box.title {
background-color: #fff;
border-bottom-left-radius: 0px;
border-bottom-right-radius: 0px;
font-weight: bold;
font-size: 12pt;
}
.text-box.meta {
background-color: #f7f7f9;
border-radius: 0;
}
.text-box.body {
background-color: #fff;
border-top-left-radius: 0px;
border-top-right-radius: 0px;
}
/* posts#new
-------------------------------------------------- */
#post_title {
width: 95%;
height: 40px;
font-weight: bold;
font-size: 25px;
}
.input-group-addon label {
margin: 0;
}
#post_body {
width: 100%;
min-height: 400px;
font-size: 9pt;
padding: 3px;
}
#post_preview {
}
.editor {
font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', 'Consolas', 'source-code-pro', 'Ricty', monospace;
}
} }
...@@ -2,6 +2,7 @@ class HomeController < ApplicationController ...@@ -2,6 +2,7 @@ class HomeController < ApplicationController
def show def show
if user_signed_in? if user_signed_in?
@latest_posts = Post.last(10)
render file: 'home/app' render file: 'home/app'
else else
render file: 'home/login' render file: 'home/login'
......
class PostsController < ApplicationController class PostsController < ApplicationController
before_action :set_post, only: [:show, :edit, :update, :destroy] before_action :set_post, only: [:show, :edit, :update, :destroy]
include ApplicationHelper
def preview
render text: h_application_format_markdown(params[:text])
end
def show_fragment
@post = Post.find(params[:id])
render layout: false
end
# GET /posts # GET /posts
# GET /posts.json # GET /posts.json
def index def index
......
module ApplicationHelper module ApplicationHelper
def h_application_format_markdown(text)
markdown = Redcarpet::Markdown.new(Redcarpet::Render::HTML, :autolink => true, :space_after_headers => true)
markdown.render(text).html_safe
end
end end
module PostsHelper module PostsHelper
def sample_body
text = <<-'EOF'
昨日、[RailsでOmniauthを使ってTwitterログインする](http://qiita.com/hilotter/items/628fd54785d3c892d048)方法をまとめました。
今回はログイン後に定型文をつぶやいたり、特定アカウントをフォローできるようにしたいと思います。
[詳細記事はこちらをご参照ください](http://blog.hello-world.jp.net/?p=867)
## 初期設定
* Gemfile記述
[注意書き] [先日の記事](http://qiita.com/hilotter/items/1fab4e284b1211738880)でご紹介したtweetstream gemでStreamingAPIも一緒に使用したい場合、twitter gemの最新バージョン(version 5)だとエラーになってしまうので4.8以上5未満を使用するようにGemfileを修正しました。
tweetstreamを使用しない場合は最新のtwitter gemを使用して問題ないと思います。
今回はtwitter gemバージョン4.8を使用したやり方を書いていますが、バージョン5以降は初期化処理のパラメータ名等が変わっているので注意が必要です。
詳しくは[twitter gem](https://github.com/sferik/twitter)のページを参照ください。
```Gemfile
gem 'tweetstream' # streaming api用に使用
gem 'mongoid', git: 'git://github.com/mongoid/mongoid.git' # streaming api用に使用
gem 'omniauth'
gem 'omniauth-twitter'
gem 'settingslogic'
gem 'twitter', "~> 4.8"
```
* bundle install
```
./bin/bundle install
```
* twitter initializer設定
```config/initializers/twitter.rb
Twitter.configure do |config|
config.consumer_key = Settings.twitter.consumer_key
config.consumer_secret = Settings.twitter.consumer_secret
end
```
* lib以下をautoloadするようapplication.rbに追記
```config/application.rb
class Application < Rails::Application
# lib以下をautoloadする
config.autoload_paths += %W(#{config.root}/lib)
config.autoload_paths += Dir["#{config.root}/lib/**/"]
end
```
* routing追加
```config/routes.rb
root 'home#index'
get "home/index"
get "/tweet", :to => 'home#tweet', :as => 'tweet'
get "/follow", :to => 'home#follow', :as => 'follow'
get "/follow_check", :to => 'home#follow_check', :as => 'follow_check'
```
## controller更新
[前回の記事](http://qiita.com/hilotter/items/628fd54785d3c892d048)ではUserモデルにユーザ情報を保存するようにしていましたが、今回はモデルは使わずsessionで管理することにします。
* SessionsController修正
```app/controllers/sessions_controller.rb
class SessionsController < BaseController
def callback
auth = request.env['omniauth.auth']
# sessionに保持するように変更
session[:user_id] = auth['uid']
session[:name] = auth['info']['name']
# 投稿に必要なauth_token, secret_tokenも取得する
session[:oauth_token] = auth['credentials']['token']
session[:oauth_token_secret] = auth['credentials']['secret']
redirect_to root_path
end
def destroy
reset_session
redirect_to root_path
end
end
```
* BaseController修正
```app/controllers/base_controller.rb
class BaseController < ApplicationController
protect_from_forgery
helper_method :current_user
def login_required
@current_user = current_user
unless @current_user
redirect_to root_path
end
end
private
def current_user
# SessionUserクラスからユーザ情報を取得するように
@current_user ||= SessionUser.new(session) if session[:user_id]
end
end
```
* SessionUserクラス作成
```
mkdir lib/user
```
```lib/user/session_user.rb
class SessionUser
def initialize(session)
@name = session[:name]
@uid = session[:user_id]
@token = session[:oauth_token]
@secret = session[:oauth_token_secret]
end
attr_reader :name, :uid, :token, :secret
end
```
* HomeController更新
```app/controllers/home_controller.rb
class HomeController < BaseController
before_action :login_required, only: [:tweet, :follow, :follow_check]
def index
end
# 定型文をつぶやく
def tweet
text = sprintf(Settings.tweet_setting.text, Time.now)
twitter_client.update(text)
flash[:notice] = "tweet: #{text}"
redirect_to root_path
end
# 特定ユーザをフォローする
def follow
twitter_client.follow(Settings.tweet_setting.follow_target_name)
flash[:notice] = "follow done"
redirect_to root_path
end
# 特定ユーザをフォローしているかどうかチェックする
def follow_check
follow_info = twitter_client.friendships(Settings.tweet_setting.follow_target_name).first
flash[:notice] = "follow check: #{follow_info['connections'].include?('following')}"
redirect_to root_path
end
private
def twitter_client
Twitter::Client.new(
:oauth_token => @current_user.token,
:oauth_token_secret => @current_user.secret
)
end
end
```
## view更新
* layoutにflash[:notice]追加
```app/views/layouts/application.html.erb
<% if current_user %>
<%= "#{current_user.uid} #{current_user.name}" %> <%= link_to 'ログアウト', logout_path %>
<% else %>
<%= link_to 'ログイン', '/auth/twitter' %>
<% end %>
<%= flash[:notice] %>
<%= yield %>
```
* home/index.html.erb更新
```app/views/home/index.html.erb
<%= link_to 'tweet', tweet_path %>
<%= link_to 'follow', follow_path %>
<%= link_to 'follow check', follow_check_path %>
```
## 設定ファイル更新
* 設定ファイルにつぶやき文言等を設定
```config/settings.yml
defaults: &defaults
development:
<<: *defaults
twitter:
consumer_key: ConsumerKey
consumer_secret: ConsumerSecret
tweet_setting:
text: "ただ今の時間は%sです" # つぶやき文言
follow_target_name: 'hilotter' # フォローしたいアカウント名
test:
<<: *defaults
production:
<<: *defaults
```
## 確認
* rails server起動
```
./bin/rails s
```
ブラウザから [http://127.0.0.1:3000](http://127.0.0.1:3000) にアクセスするとtweetリンクとfollowリンクが表示されます。
ログイン済みの場合は投稿、フォローができます。
### 参考
* [OmniAuthで認証した後に、tweetしたりfollowしたりする](http://blog.hello-world.jp.net/?p=867)
* [sferik / twitter](https://github.com/sferik/twitter)
* [omniauthで認証してtwitterにupdateする。](http://hai3.net/blog/2011/05/13/omniauth-twitter-update/)
* [Railsアプリから twitterにつぶやいてみた](http://d.hatena.ne.jp/Nunocky/20110127/p1)
* [OmniAuthで認証機能を作る](http://tech.hatenadiary.jp/entry/2013/05/01/OmniAuth%E3%81%A7%E8%AA%8D%E8%A8%BC%E6%A9%9F%E8%83%BD%E3%82%92%E4%BD%9C%E3%82%8B)
* [tsupo / Twitter_API_1.1_rate_limit.txt](https://gist.github.com/tsupo/5597066)
* [REST API v1.1 Limits per window by resource](https://dev.twitter.com/docs/rate-limiting/1.1/limits)
* [結局、Twitter API 1.1で何が変わる? 5つのポイント](http://www.atmarkit.co.jp/ait/articles/1209/26/news120.html)
* [【保存版】TwitterAPI1.1 REST API 全項目解説](http://dx.24-7.co.jp/twitterapi1-1-rest-api/)
* [twitter gemを使ったruby一行野郎(ツイート・トレンド・検索・フォロー&フォロワー一覧・リスト一覧&操作…)](http://d.hatena.ne.jp/riocampos+tech/20130616/p1)
* [[Ruby on Rails 3.1] lib ディレクトリ以下に自作ライブラリを置いて autoload を有効にする設定方法](http://codenote.net/ruby/rails/827.html)
EOF
end
end end
<div class="app"> <div class="app">
<nav class="navbar navbar-default navbar-fixed-top" role="navigation"> <%= render partial: 'partials/app_header' %>
<div class="container">
<!-- Brand and toggle get grouped for better mobile display -->
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="#">Rendezvous</a>
</div>
<!-- Collect the nav links, forms, and other content for toggling -->
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
<form class="navbar-form navbar-left" role="search">
<div class="form-group">
<input type="text" class="form-control" placeholder="Search">
</div>
<button type="submit" class="btn btn-default">
<span class="glyphicon glyphicon-search"></span>
</button>
</form>
<ul class="nav navbar-nav navbar-right">
<li><a href="" class="btn btn-primary">Post</a></li>
<li><a href="<%= user_omniauth_authorize_path(:google_oauth2) %>">Login</a></li>
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">
<img src="<%= current_user.image_url %>" width="25" height="25">
<%= current_user.name %> <b class="caret"></b>
</a>
<ul class="dropdown-menu">
<li><a href="#">Action</a></li>
<li><a href="#">Another action</a></li>
<li><a href="#">Something else here</a></li>
<li class="divider"></li>
<li><a href="#">Separated link</a></li>
</ul>
</li>
</ul>
</div><!-- /.navbar-collapse -->
</div><!-- /.container -->
</nav>
<div class="container"> <div class="container">
...@@ -62,60 +19,16 @@ ...@@ -62,60 +19,16 @@
</div><!-- /input-group --> </div><!-- /input-group -->
<div class="list-group"> <div class="list-group">
<a href="#" class="list-group-item active">Link</a> <% @latest_posts.each do |post| %>
<a href="#" class="list-group-item">Link</a> <a href="#" data-post-id="<%= post.id %>" class="list-group-item post-list"><%= post.title %></a>
<a href="#" class="list-group-item">Link</a> <% end %>
<a href="#" class="list-group-item">Link</a>
<a href="#" class="list-group-item">Link</a>
<a href="#" class="list-group-item">Link</a>
<a href="#" class="list-group-item">Link</a>
<a href="#" class="list-group-item">Link</a>
<a href="#" class="list-group-item">Link</a>
<a href="#" class="list-group-item">Link</a>
</div> </div>
</div><!--/span--> </div><!--/span-->
<div class="col-xs-12 col-sm-6 col-md-8"> <div class="col-xs-12 col-sm-6 col-md-8">
<h2>最新の投稿</h2> <div id="list_post">
<p style="color:#aaa;font-size:30px">&lt;-- Select a post...</p>
<div class="box-text">
<h3>Railsで簡単にページングする方法</h3>
</div>
<div class="box-highlight">
<span class="label label-primary">Rails (4.x.x)</span>
<span class="label label-primary">日報</span>
<a href="#">@tady</a>
<span>2013/11/29 17:31:18</span>
</div>
<div class="box-text">
<h3>Railsで簡単にページングする方法</h3>
</div>
<div class="box-highlight">
<span class="label label-primary">Rails (4.x.x)</span>
<span class="label label-primary">日報</span>
</div>
<div class="box-text">
<h3>Railsで簡単にページングする方法</h3>
</div>
<div class="box-highlight">
<span class="label label-primary">Rails (4.x.x)</span>
<span class="label label-primary">日報</span>
</div>
<h2>人気の投稿</h2>
<div class="box-text">
<h3>Railsで簡単にページングする方法</h3>
</div>
<div class="box-highlight">
<span class="label label-primary">Rails (4.x.x)</span>
<span class="label label-primary">日報</span>
<a href="#">@tady</a>
<span>2013/11/29 17:31:18</span>
</div> </div>
</div><!--/span--> </div><!--/span-->
......
<nav class="navbar navbar-default navbar-fixed-top" role="navigation">
<div class="container">
<!-- Brand and toggle get grouped for better mobile display -->
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="#">Rendezvous</a>
</div>
<!-- Collect the nav links, forms, and other content for toggling -->
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
<form class="navbar-form navbar-left" role="search">
<div class="form-group">
<input type="text" class="form-control" placeholder="Search">
</div>
<button type="submit" class="btn btn-default">
<span class="glyphicon glyphicon-search"></span>
</button>
</form>
<div class="navbar-right">
<a href="<%= new_post_path %>" class="btn btn-primary navbar-btn">Post&nbsp;&nbsp;
<span class="glyphicon glyphicon-pencil"></span>
</a>
<a href="#" class="btn btn-default navbar-btn">
<span class="glyphicon glyphicon-wrench"></span>
</a>
<img src="<%= current_user.image_url %>" width="25" height="25">
<%= current_user.name %>
</div>
</div><!-- /.navbar-collapse -->
</div><!-- /.container -->
</nav>
<%= form_for(@post) do |f| %> <%= form_for(@post) do |f| %>
<% if @post.errors.any? %>
<div id="error_explanation"> <div class="container">
<h2><%= pluralize(@post.errors.count, "error") %> prohibited this post from being saved:</h2>
<% if @post.errors.any? %>
<ul> <div id="error_explanation">
<% @post.errors.full_messages.each do |msg| %> <h2><%= pluralize(@post.errors.count, "error") %> prohibited this post from being saved:</h2>
<li><%= msg %></li>
<% end %> <ul>
</ul> <% @post.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
<div class="row">
<div class="col-md-10">
<div class="field">
<div class="input-group">
<span class="input-group-addon"><%= f.label :title %></span>
<%= f.text_field :title, class: 'form-control' %>
</div>
</div>
</div>
<div class="col-md-2">
<div class="actions">
<%= f.submit class: 'btn btn-primary' %>
</div>
</div>
</div> </div>
<% end %>
<br>
<div class="field">
<%= f.label :title %><br> <div class="row">
<%= f.text_field :title %>
</div> <div class="col-xs-6 col-md-6">
<div class="field">
<%= f.label :body %><br> <div class="field">
<%= f.text_area :body %> <!-- <%= f.label :body %><br> -->
</div> <%= f.text_area :body, class: 'autosize editor', value: sample_body %>
<div class="actions"> </div>
<%= f.submit %>
</div> </div><!--/span-->
<div class="col-xs-12 col-sm-6 col-md-6">
<div class="box-text">
<div id="post_preview">
<%#= h_application_format_markdown(sample_body).html_safe %>
</div>
</div>
</div><!--/span-->
</div><!--/row-->
<hr>
<footer>
<p>&copy; tady</p>
</footer>
</div><!--/.container-->
<% end %> <% end %>
<h1>New post</h1> <div class="app">
<%= render 'form' %> <%= render partial: 'partials/app_header' %>
<h1>新しい投稿</h1>
<%= render 'form' %>
</div>
<%= link_to 'Back', posts_path %>
<div class="text-box title"><%= @post.title %></div>
<div class="text-box meta">
<span class="label label-info">#Rails (4.x.x)</span>
<span class="label label-info">#ruby</span>
<span class="label label-info">#日報</span>
<span class="label label-success">@tady</span>
<span class="label label-danger"><%= @post.updated_at.strftime('%Y-%m-%d') %></span>
</div>
<div class="text-box body"><%= h_application_format_markdown(@post.body) %></div>
Rendezvous::Application.routes.draw do Rendezvous::Application.routes.draw do
root 'home#show' root 'home#show'
post 'posts/preview' => 'posts#preview'
get 'posts/show_fragment' => 'posts#show_fragment'
resources :posts resources :posts
devise_for :users, :controllers => { :omniauth_callbacks => "users/omniauth_callbacks" } devise_for :users, :controllers => { :omniauth_callbacks => "users/omniauth_callbacks" }
......
...@@ -13,3 +13,11 @@ ...@@ -13,3 +13,11 @@
Tag.find_or_create_by(name: tag) Tag.find_or_create_by(name: tag)
end end
Dir.glob(Rails.root.join('db', 'seeds').to_s + '/*').each do |file_name|
puts "[Post Tag] #{file_name}"
title = file_name.split('/').last
Post.find_or_create_by(title: title) do |post|
post.body = File.read(file_name)
end
end
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment