メモ用サブブログ

子曰わく學びて時にこれを習う。

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度以上フォローすることはできなくなります。

Ruby on Rails チュートリアル:実例を使って Rails を学ぼう

Twitter useridからユーザーを取得する方法

Twitter devでアプリケーションを作ってそこからAPIを叩くなどの方法もありますが、一番簡単なのは以下の方法です。

https://twitter.com/intent/user?user_id=xxxxxxxxx

このURLのxxxの部分に知りたいuseridを入れてアクセスすると合致したユーザーのページが表示されます。

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"><!-- まとめて指定 -->

参考:できるPRO Apache Webサーバー 改訂版 Version 2.4/2.2/2.0対応

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
   },

この部分がいまいち謎。バックグラウンドとは。

ひとつわかったことは、設定された情報はローカルストレージに保存されているっぽい。呼び出す時はJSで呼び出す。

Chrome拡張のインストール場所(Mac)

/Users/ユーザー名/Library/Application Support/Google/Chrome/Default/Extensions

Libraryは隠しフォルダなので通常のFinderからはShift++Gのフォルダの移動を使って移動しないと到達できない。あるいはターミナルから移動。

Hyper Reminder / ハイパーリマインダー ver1.1.0へ更新

f:id:lettuce0831:20140309230829p:plain

ハイパーリマインダーがより実用的になり、利便性が増してパワーアップしました。

PSMには提出したので、問題なければ時期に配信されます。

続きを読む