Sitemap
Sitemap_generator gem을 이용합니다. [Rails를 위한 가이드]가 따로 있습니다. Rails 사용자를 위한 sitemap_generator guide 아래 코드 내용은 Rails4 기준입니다. Initialization Gemfile gem 'sitemap_generator' bin/rake sitemap:install를 이용하면 config/sitemap.rb가 만들어집니다. Configuration sitemap configuration 가이드를 참고하세요. config/sitemap.rb SitemapGenerator::Sitemap.default_host = "http://****.com" SitemapGenerator::Sitemap.create do YourModel.find_each do |yourmodel| add yourmodel_path(yourmodel), :changefreq => 'weekly', :lastmod => yourmodel.updated_at end Refresh bin/rake sitemap:refresh를 이용하면 public 폴더에 sitemap.xml.gz 파일이 생성됩니다. https://github.com/kjvarga/sitemap_generator#rails
Pagination - 다른 페이지에 같은 record가 나오는 문제
will_paginate gem을 이용하는데, 다른 페이지에 같은 record가 올라오는 경우가 있었다. 문제는 infinite scrolling을 넣으며 ajax로 다음 페이지를 붙이다 보니, 중복되게 반복되는 경우가 발생했다. gem의 문제인가 해서 psql로 직접 sql을 날려보니, sql 결과에서도 같은 record가 나타났다. Before pnm_development=# SELECT "sub_menus".*, "menus".name FROM "sub_menus" INNER JOIN "menus" ON "menus"."id" = "sub_menus"."menu_id" WHERE (menus.category_id = 1) ORDER BY menus.name collate "C" asc LIMIT 10 OFFSET 10; id | name | created_at | updated_at | menu_id | description |...
Turbolinks - Kakao sdk
Codes Only. kakao_story.js $(document).on("turbolinks:load", function (){ if ( $('#kakaostory-share-button').length > 0 ) { Kakao.Story.createShareButton({ container: '#kakaostory-share-button' }); } }); application.html.erb <head> <%= render 'layouts/kakao-sdk' %> ... </head> <body> <%= render 'layouts/kakao-sdk-init' %> ... _kakao-sdk-init.html.erb <script type='text/javascript'> if ( typeof Kakao != "object") { Kakao.init(ENV["KAKAO-JS-KEY"]); } </script> _kakao-sdk.html.erb <script src="//developers.kakao.com/sdk/js/kakao.min.js"></script>
Omniauth
####Gemfile Omniauth-identity 는 hash function으로 bcrypt를 이용합니다. Gemfile에 bcrypt도 추가해줍니다. gem 'omniauth' gem 'omniauth-identity' gem 'omniauth-kakao' gem 'bcrypt', '3.1.11' Omniauth 초기화 config/initializers/omniauth.rb TODO: Rack middleware가 뭐지? Omniauth가 좋은점이 authentication 이후에 그 정보를 어떻게 저장하고 보여주는지는 온전히 사용하는 사람의 몫으로 남겨져 있음. Rails.application.config.middleware.use OmniAuth::Builder do provider :kakao, ENV['KAKAO_CLIENT_ID'] provider :identity, on_failed_registration: lambda { |env| SessionsController.action(:new).call(env) } # Enable to redirect a failure page in development mode OmniAuth.config.on_failure = Proc.new { |env| OmniAuth::FailureEndpoint.new(env).redirect_to_failure } # 또는 Redirect...
tip - nil이 아닌경우에 method를 실행
object가 nil이 아닌 경우에만 method를 실행하고 싶을 때가 있다. self.send(:method) if self.respond_to?(:method) Rails에는 .try()가 있다. http://stackoverflow.com/questions/15787610/call-method-only-if-it-exists http://everydayrails.com/2011/04/28/rails-try-method.html