Rails 複合インデックスの使用で組み合わせの重複防止
リスト11.1 db/migrate/[timestamp]_create_relationships.rb
class CreateRelationships < ActiveRecord::Migration def change create_table :relationships do |t| t.integer :follower_id t.integer :followed_id t.timestamps end add_index :relationships, :follower_id add_index :relationships, :followed_id add_index :relationships, [:follower_id, :followed_id], unique: true # <--この行が複合インデックス end end
リスト11.1には複合 (composite) インデックスが使用されていることにご注目ください。これはfollower_idとfollowed_idを組み合わせたときの一意性 (uniquenes: 重複がないこと) を強制するもので、これにより、あるユーザーは別のユーザーを2度以上フォローすることはできなくなります。
Twitter useridからユーザーを取得する方法
Twitter devでアプリケーションを作ってそこからAPIを叩くなどの方法もありますが、一番簡単なのは以下の方法です。
https://twitter.com/intent/user?user_id=xxxxxxxxx
このURLのxxx
の部分に知りたいuseridを入れてアクセスすると合致したユーザーのページが表示されます。
ハイパーリマインダー ver1.1.0 公開されました。
英語版にした時に不具合があるようです。
差し戻されたので公開までもう少し時間がかかりそうです。
4/23追記:1.1.0公開されました。アップデートお願いします。
Ruby 一見代入に見えるただのメソッド
module SessionsHelper def sign_in(user) . . . end def current_user=(user) @current_user = user end end
上のコードで使用されている特殊な文法は混乱しやすいのでご注意ください。普通のプログラミング言語では、定義するメソッドの名前に等号を使用することはできませんが、Rubyではメソッド名末尾の等号には特殊な意味があり、上のコードはcurrent_userへの要素代入を扱うように設計されたcurrent_user=というメソッドを単に定義します。つまり、以下のコードは
self.current_user = ...
自動的に以下のコードに置き換えられます。
current_user=(...)
Ruby on Rails チュートリアル:実例を使って Rails を学ぼう
代入演算子
リスト8.22では、Rubyでは定番の (しかし最初はまごつきやすい) ||= (“or equals”) 代入演算子を使用しています (コラム 8.2)。この代入演算子は、@current_userが未定義の場合にのみ、@current_userインスタンス変数に記憶トークンを設定します6。
@current_user ||= User.find_by(remember_token: remember_token)
SEO noindex などメタタグ意味
<meta name="robots" content="noindex"><!-- このページを登録しない --> <meta name="robots" content="nofollow"><!-- このページからのリンクをたどらない --> <meta name="robots" content="noarchive"><!-- キャッシュに保存しない --> <meta name="robots" content="noindex, nofollow, noarchive"><!-- まとめて指定 -->
Chrome 拡張。設定のGUIやアイコンクリック時のポップアップのビューの作り方
{ "background": { "page": "background.html", "persistent": false }, "browser_action": { "default_icon": "icon64.png", "default_popup": "popup.html", "default_title": "Create Link" }, "content_scripts": [ { "all_frames": true, "css": [ ], "js": [ "content.js" ], "matches": [ "http://*/*", "https://*/*" ], "run_at": "document_end" } ], "description": "Copy current page URL to clipboard in various formats.", "icons": { "128": "icon128.png", "16": "icon16.png", "32": "icon32.png", "64": "icon64.png" }, "key": "", "manifest_version": 2, "name": "Create Link", "options_page": "options.html", "permissions": [ "tabs", "http://*/*", "https://*/*", "contextMenus" ], "update_url": "https://clients2.google.com/service/update2/crx", "version": "0.2.9" }
これはCreate Linkのマニフェストファイル。
"options_page": "options.html"
がオプションを設定するGUIに該当する部分と思われる。
"default_popup": "popup.html"
の部分でアイコンクリック時のビューを設定。
"background": { "page": "background.html", "persistent": false },
この部分がいまいち謎。バックグラウンドとは。
- バックグラウンド・ページ | Chrome Extensions API リファレンス
- Chrome拡張では、Background pages よりも Event pages を使用したほうが良い - よんちゅBlog
ひとつわかったことは、設定された情報はローカルストレージ
に保存されているっぽい。呼び出す時はJSで呼び出す。
Chrome拡張のインストール場所(Mac)
/Users/ユーザー名/Library/Application Support/Google/Chrome/Default/Extensions
Library
は隠しフォルダなので通常のFinderからはShift
+⌘
+G
のフォルダの移動を使って移動しないと到達できない。あるいはターミナルから移動。