<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Kinopyo's Blog</title>
	
	<link>http://www.kinopyo.com/blog</link>
	<description>I love this game.</description>
	<lastBuildDate>Fri, 30 Jul 2010 08:31:49 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
   <image>
    <title>Kinopyo's Blog</title>
    <url>http://www.gravatar.com/avatar/ad516503a11cd5ca435a</url>
    <link>http://www.kinopyo.com/blog</link>
   </image>
	
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/KinopyosBlog" /><feedburner:info uri="kinopyosblog" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://www.kinopyo.com/blog/?pushpress=hub" /><item>
		<title>TextMate Bundler、NetBeansプラグインfor HAML</title>
		<link>http://feedproxy.google.com/~r/KinopyosBlog/~3/mx8tJXZd2Q4/textmate-bundler-netbeans-plugin-for-haml</link>
		<comments>http://www.kinopyo.com/blog/textmate-bundler-netbeans-plugin-for-haml#comments</comments>
		<pubDate>Fri, 30 Jul 2010 08:31:49 +0000</pubDate>
		<dc:creator>kinopyo</dc:creator>
				<category><![CDATA[IDE]]></category>
		<category><![CDATA[haml]]></category>
		<category><![CDATA[netbeans]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[textmate]]></category>

		<guid isPermaLink="false">http://www.kinopyo.com/blog/?p=1302</guid>
		<description><![CDATA[
			
				
			
		

TextMateのBundlerはこちら：
http://github.com/handcrafted/handcrafted-haml-textmate-bundle
NetBeansのプラグインはこちらでダウンロード：
FaqPluginInstall &#8211; NetBeans Wiki
ほぼハイライト以外は何の機能もないです。
HAMLでRubyコードを書いても入力補完も、リファレンスも出ませんでした。

]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.kinopyo.com%2Fblog%2Ftextmate-bundler-netbeans-plugin-for-haml"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.kinopyo.com%2Fblog%2Ftextmate-bundler-netbeans-plugin-for-haml&amp;source=fantasyday&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<div class="section">
<h4 id="id_d41d8cd98f00b204e9800998ecf8427e_header_0">TextMateのBundlerはこちら：</h4>
<p><a href="http://github.com/handcrafted/handcrafted-haml-textmate-bundle">http://github.com/handcrafted/handcrafted-haml-textmate-bundle</a></p>
<h4 id="id_d41d8cd98f00b204e9800998ecf8427e_header_1">NetBeansのプラグインはこちらでダウンロード：</h4>
<p><a href="http://wiki.netbeans.org/FaqPluginInstall">FaqPluginInstall &#8211; NetBeans Wiki</a></p>
<p>ほぼハイライト以外は何の機能もないです。</p>
<p>HAMLでRubyコードを書いても入力補完も、リファレンスも出ませんでした。</p>
</div>
<img src="http://www.kinopyo.com/blog/?ak_action=api_record_view&id=1302&type=feed" alt="" /><img src="http://feeds.feedburner.com/~r/KinopyosBlog/~4/mx8tJXZd2Q4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.kinopyo.com/blog/textmate-bundler-netbeans-plugin-for-haml/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.kinopyo.com/blog/textmate-bundler-netbeans-plugin-for-haml</feedburner:origLink></item>
		<item>
		<title>Rails: URLをid+slug”の形にカスタマイズ</title>
		<link>http://feedproxy.google.com/~r/KinopyosBlog/~3/rGsVibEiYOw/rails-id-slug-name-in-url</link>
		<comments>http://www.kinopyo.com/blog/rails-id-slug-name-in-url#comments</comments>
		<pubDate>Wed, 28 Jul 2010 15:17:37 +0000</pubDate>
		<dc:creator>kinopyo</dc:creator>
				<category><![CDATA[Ruby]]></category>
		<category><![CDATA[rails]]></category>

		<guid isPermaLink="false">http://www.kinopyo.com/blog/?p=1287</guid>
		<description><![CDATA[
			
				
			
		

slugはurlをより綺麗に表示するためのものです。例えばこの記事のpermanent urlは&#8221;rails-id-slug-name-in-url&#8221;にしています。英語世界になるんですが、これのようにurlを見ただけでそのurl先の内容が大体わかるようにするのがslugです。
この記事ではRailsで&#8221;id + post.title&#8221;のような形のURLを作る方法を紹介します。
方法
モデルクラス内にto_paramメソッドをオーバーライドするだけです。
例として

  class Person
    def to_param
      &#34;#{id}-#{name.parameterize}&#34;
    end
  end

  #controller
  @person = Person.find(1)
  # =&#62; #&#60;Person id: 1, name: &#34;Donald E. Knuth&#34;&#62;

  #view
  &#60;%= link_to(@person.name, person_path(@person)) %&#62;
  # =&#62; &#60;a href=&#34;/person/1-donald-e-knuth&#34;&#62;Donald E. Knuth&#60;/a&#62;

上記のようにmodelクラスを修正するだけで、他の影響はないです。URL: &#8216;/person/1-kinopyo&#8217;と&#8217;/person/1&#8242;はどっちでも使えます。
parameterizeはRailsのビルトインのメソッドでurlに使う文字列に変換してくれるんです。しかし日本語などは完全にブランクに変換するので要注意です。
もしurlを&#8221;/person/kinopyo&#8221;のようにperson.nameにカスタムしたい場合はこれより少し複雑になります。興味のある方は下記リンク(英語)を参照してください。 [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.kinopyo.com%2Fblog%2Frails-id-slug-name-in-url"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.kinopyo.com%2Fblog%2Frails-id-slug-name-in-url&amp;source=fantasyday&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<div class="section">
<p>slugはurlをより綺麗に表示するためのものです。例えばこの記事のpermanent urlは&#8221;rails-id-slug-name-in-url&#8221;にしています。英語世界になるんですが、これのようにurlを見ただけでそのurl先の内容が大体わかるようにするのがslugです。</p>
<p>この記事ではRailsで&#8221;id + post.title&#8221;のような形のURLを作る方法を紹介します。</p>
<h4 id="id_d41d8cd98f00b204e9800998ecf8427e_header_0">方法</h4>
<p>モデルクラス内に<em>to_param</em>メソッドをオーバーライドするだけです。</p>
<p>例として</p>
<pre class="brush: ruby;">
  class Person
    def to_param
      &quot;#{id}-#{name.parameterize}&quot;
    end
  end

  #controller
  @person = Person.find(1)
  # =&gt; #&lt;Person id: 1, name: &quot;Donald E. Knuth&quot;&gt;

  #view
  &lt;%= link_to(@person.name, person_path(@person)) %&gt;
  # =&gt; &lt;a href=&quot;/person/1-donald-e-knuth&quot;&gt;Donald E. Knuth&lt;/a&gt;
</pre>
<p>上記のようにmodelクラスを修正するだけで、他の影響はないです。URL: &#8216;/person/1-kinopyo&#8217;と&#8217;/person/1&#8242;はどっちでも使えます。</p>
<p><em>parameterize</em>はRailsのビルトインのメソッドでurlに使う文字列に変換してくれるんです。<strong>しかし日本語などは完全にブランクに変換するので要注意です。</strong></p>
<p>もしurlを&#8221;/person/kinopyo&#8221;のようにperson.nameにカスタムしたい場合はこれより少し複雑になります。興味のある方は下記リンク(英語)を参照してください。 <a href="http://augustl.heroku.com/blog/styling-rails-urls">http://augustl.heroku.com/blog/styling-rails-urls</a>.</p>
</div>
<img src="http://www.kinopyo.com/blog/?ak_action=api_record_view&id=1287&type=feed" alt="" /><img src="http://feeds.feedburner.com/~r/KinopyosBlog/~4/rGsVibEiYOw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.kinopyo.com/blog/rails-id-slug-name-in-url/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.kinopyo.com/blog/rails-id-slug-name-in-url</feedburner:origLink></item>
		<item>
		<title>Rails: 必須マークを出力するHelperメソッドを作る</title>
		<link>http://feedproxy.google.com/~r/KinopyosBlog/~3/9iKF7j-fb88/rails-a-helper-method-shows-the-required-mark</link>
		<comments>http://www.kinopyo.com/blog/rails-a-helper-method-shows-the-required-mark#comments</comments>
		<pubDate>Mon, 26 Jul 2010 15:59:46 +0000</pubDate>
		<dc:creator>kinopyo</dc:creator>
				<category><![CDATA[Ruby]]></category>
		<category><![CDATA[rails]]></category>

		<guid isPermaLink="false">http://www.kinopyo.com/blog/?p=1285</guid>
		<description><![CDATA[
			
				
			
		

一つのHelperメソッドを作って、Modelに必須チェックが入ってるプロパティに対して必須マークの&#8221;*&#8221;を出力します。
まずapplicaton_helperにmark_requiredのメソッドを作ります。第一引数にはオブジェクト、第二引数はそのクラスのプロパティを渡します。

# application_helper.rb
def mark_required(object, attribute)
  &#34;*&#34; if object.class.validators_on(attribute).map(&#38;:class).include? ActiveModel::Validations::PresenceValidator
end

viewのerbには下記のように@userインスタンス変数と:nameを渡します。もしUserモデルに:nameに対して必須バリデーションが存在すれば必須マークが出力されます。

  &#60;div class=&#34;field&#34;&#62;
    &#60;%= f.label :name %&#62;&#60;%= mark_required(@user, :name) %&#62;&#60;br /&#62;
    &#60;%= f.text_field :name %&#62;
  &#60;/div&#62;

参考リンク：http://railscasts.com/episodes/211-validations-in-rails-3

]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.kinopyo.com%2Fblog%2Frails-a-helper-method-shows-the-required-mark"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.kinopyo.com%2Fblog%2Frails-a-helper-method-shows-the-required-mark&amp;source=fantasyday&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<div class="section">
<p>一つのHelperメソッドを作って、Modelに必須チェックが入ってるプロパティに対して必須マークの&#8221;*&#8221;を出力します。</p>
<p>まずapplicaton_helperにmark_requiredのメソッドを作ります。第一引数にはオブジェクト、第二引数はそのクラスのプロパティを渡します。</p>
<pre class="brush: ruby;">
# application_helper.rb
def mark_required(object, attribute)
  &quot;*&quot; if object.class.validators_on(attribute).map(&amp;:class).include? ActiveModel::Validations::PresenceValidator
end
</pre>
<p>viewのerbには下記のように@userインスタンス変数と:nameを渡します。もしUserモデルに:nameに対して必須バリデーションが存在すれば必須マークが出力されます。</p>
<pre class="brush: ruby;">
  &lt;div class=&quot;field&quot;&gt;
    &lt;%= f.label :name %&gt;&lt;%= mark_required(@user, :name) %&gt;&lt;br /&gt;
    &lt;%= f.text_field :name %&gt;
  &lt;/div&gt;
</pre>
<p>参考リンク：<a href="http://railscasts.com/episodes/211-validations-in-rails-3">http://railscasts.com/episodes/211-validations-in-rails-3</a></p>
</div>
<img src="http://www.kinopyo.com/blog/?ak_action=api_record_view&id=1285&type=feed" alt="" /><img src="http://feeds.feedburner.com/~r/KinopyosBlog/~4/9iKF7j-fb88" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.kinopyo.com/blog/rails-a-helper-method-shows-the-required-mark/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.kinopyo.com/blog/rails-a-helper-method-shows-the-required-mark</feedburner:origLink></item>
		<item>
		<title>Rails: カスタム バリデート メソッドを作る</title>
		<link>http://feedproxy.google.com/~r/KinopyosBlog/~3/jZVx63euzkA/rails-how-to-create-a-custom-validate-method</link>
		<comments>http://www.kinopyo.com/blog/rails-how-to-create-a-custom-validate-method#comments</comments>
		<pubDate>Sun, 25 Jul 2010 13:28:44 +0000</pubDate>
		<dc:creator>kinopyo</dc:creator>
				<category><![CDATA[Ruby]]></category>
		<category><![CDATA[rails]]></category>

		<guid isPermaLink="false">http://www.kinopyo.com/blog/?p=1280</guid>
		<description><![CDATA[
			
				
			
		

http://railscasts.com/episodes/211-validations-in-rails-3で学んだ技です。
Rails 3.0 beta4を利用しています。
カスタムバリデーションメソッドを作成する方法を紹介します。
こんなコードがあるとします。Userモデルのemailに対して妥当性チェックは普通こう書きます。

class User &#60; ActiveRecord::Base
  validates :email,  :format =&#62; { :with =&#62; /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/i }
end

ここの:format => の部分を抽出してemail_validateというバリデーションメソッドを作ります。
方法
libフォルダにemail_format_validator.rbというファイルを新規作成します。

# lib/email_format_validator.rb
class EmailFormatValidator &#60; ActiveModel::EachValidator
  def validate_each(object, attribute, value)
    unless value =~ /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/i
      object.errors[attribute] &#60;&#60; (options[:message] &#124;&#124; &#34;is invalid&#34;)
    end
  end
end

そしてUser.rbのソースを下記のように修正します。

#User.rb
class User &#60; ActiveRecord::Base
 [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.kinopyo.com%2Fblog%2Frails-how-to-create-a-custom-validate-method"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.kinopyo.com%2Fblog%2Frails-how-to-create-a-custom-validate-method&amp;source=fantasyday&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<div class="section">
<p><a href="http://railscasts.com/episodes/211-validations-in-rails-3">http://railscasts.com/episodes/211-validations-in-rails-3</a>で学んだ技です。</p>
<p>Rails 3.0 beta4を利用しています。</p>
<p>カスタムバリデーションメソッドを作成する方法を紹介します。</p>
<p>こんなコードがあるとします。Userモデルのemailに対して妥当性チェックは普通こう書きます。</p>
<pre class="brush: ruby;">
class User &lt; ActiveRecord::Base
  validates :email,  :format =&gt; { :with =&gt; /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/i }
end
</pre>
<p>ここの:format => の部分を抽出してemail_validateというバリデーションメソッドを作ります。</p>
<h4 id="id_d41d8cd98f00b204e9800998ecf8427e_header_0">方法</h4>
<p>libフォルダにemail_format_validator.rbというファイルを新規作成します。</p>
<pre class="brush: ruby;">
# lib/email_format_validator.rb
class EmailFormatValidator &lt; ActiveModel::EachValidator
  def validate_each(object, attribute, value)
    unless value =~ /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/i
      object.errors[attribute] &lt;&lt; (options[:message] || &quot;is invalid&quot;)
    end
  end
end
</pre>
<p>そしてUser.rbのソースを下記のように修正します。</p>
<pre class="brush: ruby;">
#User.rb
class User &lt; ActiveRecord::Base
  validates :email, :email_format =&gt; true
end
</pre>
<p>:email_formatは自動的にEmailFormatValidatorにマッピングします。</p>
</div>
<img src="http://www.kinopyo.com/blog/?ak_action=api_record_view&id=1280&type=feed" alt="" /><img src="http://feeds.feedburner.com/~r/KinopyosBlog/~4/jZVx63euzkA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.kinopyo.com/blog/rails-how-to-create-a-custom-validate-method/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.kinopyo.com/blog/rails-how-to-create-a-custom-validate-method</feedburner:origLink></item>
		<item>
		<title>はてなブックマークエントリをブログに設置</title>
		<link>http://feedproxy.google.com/~r/KinopyosBlog/~3/uHDzz_RGED8/setup-blogparts-hatena-bookmark-entry</link>
		<comments>http://www.kinopyo.com/blog/setup-blogparts-hatena-bookmark-entry#comments</comments>
		<pubDate>Tue, 20 Jul 2010 16:21:21 +0000</pubDate>
		<dc:creator>kinopyo</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[はてな]]></category>

		<guid isPermaLink="false">http://www.kinopyo.com/blog/?p=1272</guid>
		<description><![CDATA[
			
				
			
		

http://b.hatena.ne.jp/guide/blogpartsにて自分のサイトの人気エントリーをブログパーツとして設置できます。
手順にしたがってブログのURLを入力して簡単の設定を行ったあとは貼り付けるコードが生成されるため、それをブログにコピペすればOKです。
できたらこんな感じです。なぜか画像が暗くなっちゃいました。


]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.kinopyo.com%2Fblog%2Fsetup-blogparts-hatena-bookmark-entry"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.kinopyo.com%2Fblog%2Fsetup-blogparts-hatena-bookmark-entry&amp;source=fantasyday&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<div class="section">
<p><a href="http://b.hatena.ne.jp/guide/blogparts">http://b.hatena.ne.jp/guide/blogparts</a>にて自分のサイトの人気エントリーをブログパーツとして設置できます。</p>
<p>手順にしたがってブログのURLを入力して簡単の設定を行ったあとは貼り付けるコードが生成されるため、それをブログにコピペすればOKです。</p>
<p>できたらこんな感じです。なぜか画像が暗くなっちゃいました。</p>
<p><a href="http://www.kinopyo.com/blog/wp-content/uploads/2010/07/hatena-bookmark-entry.jpg" rel="lightbox[pics1272]" title="hatena-bookmark-entry"><img src="http://www.kinopyo.com/blog/wp-content/uploads/2010/07/hatena-bookmark-entry.jpg" alt="hatena-bookmark-entry" width="204" height="306" class="attachment wp-att-1276 " /></a></p>
</div>
<img src="http://www.kinopyo.com/blog/?ak_action=api_record_view&id=1272&type=feed" alt="" /><img src="http://feeds.feedburner.com/~r/KinopyosBlog/~4/uHDzz_RGED8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.kinopyo.com/blog/setup-blogparts-hatena-bookmark-entry/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.kinopyo.com/blog/setup-blogparts-hatena-bookmark-entry</feedburner:origLink></item>
		<item>
		<title>Rails ActiveRecord::HasAndBelongsToManyAssociationWithPrimaryKeyError</title>
		<link>http://feedproxy.google.com/~r/KinopyosBlog/~3/nj3dYTzYTAw/rails-active-record-has-and-belongs-to-many-association-with-primary-keyerror</link>
		<comments>http://www.kinopyo.com/blog/rails-active-record-has-and-belongs-to-many-association-with-primary-keyerror#comments</comments>
		<pubDate>Tue, 20 Jul 2010 12:41:58 +0000</pubDate>
		<dc:creator>kinopyo</dc:creator>
				<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://www.kinopyo.com/blog/?p=1262</guid>
		<description><![CDATA[
			
				
			
		

Railsでhas_and_belongs_to_manyを使うときにこんなエラーが出ました。
ActiveRecord::HasAndBelongsToManyAssociationWithPrimaryKeyErrorの中身は：



Primary key is not allowed in a has_and_belongs_to_many join table (articles_users).

これはメッセージの通りリンクテーブル（ここではarticles_users）にPKが設定されたからです。
解決方法
:id => falseをmigration文に追加すればOKです。

create_table :articles_users, :id =&#62; false do &#124;t&#124;
  t.integer :article_id
  t.integer :user_id
end


]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.kinopyo.com%2Fblog%2Frails-active-record-has-and-belongs-to-many-association-with-primary-keyerror"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.kinopyo.com%2Fblog%2Frails-active-record-has-and-belongs-to-many-association-with-primary-keyerror&amp;source=fantasyday&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<div class="section">
<p>Railsでhas_and_belongs_to_manyを使うときにこんなエラーが出ました。</p>
<p><em>ActiveRecord::HasAndBelongsToManyAssociationWithPrimaryKeyError</em>の中身は：</p>
<p><br/></p>
<pre>

Primary key is not allowed in a has_and_belongs_to_many join table (articles_users).
</pre>
<p>これはメッセージの通りリンクテーブル（ここではarticles_users）にPKが設定されたからです。</p>
<h4 id="id_d41d8cd98f00b204e9800998ecf8427e_header_0">解決方法</h4>
<p><em>:id => false</em>をmigration文に追加すればOKです。</p>
<pre class="brush: ruby;">
create_table :articles_users, :id =&gt; false do |t|
  t.integer :article_id
  t.integer :user_id
end
</pre>
</div>
<img src="http://www.kinopyo.com/blog/?ak_action=api_record_view&id=1262&type=feed" alt="" /><img src="http://feeds.feedburner.com/~r/KinopyosBlog/~4/nj3dYTzYTAw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.kinopyo.com/blog/rails-active-record-has-and-belongs-to-many-association-with-primary-keyerror/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.kinopyo.com/blog/rails-active-record-has-and-belongs-to-many-association-with-primary-keyerror</feedburner:origLink></item>
		<item>
		<title>SQLiteのよく使うコマンド</title>
		<link>http://feedproxy.google.com/~r/KinopyosBlog/~3/ONUqhqt_8iQ/sqlite-common-comman</link>
		<comments>http://www.kinopyo.com/blog/sqlite-common-comman#comments</comments>
		<pubDate>Sun, 18 Jul 2010 16:28:16 +0000</pubDate>
		<dc:creator>kinopyo</dc:creator>
				<category><![CDATA[sqlite]]></category>

		<guid isPermaLink="false">http://www.kinopyo.com/blog/?p=1257</guid>
		<description><![CDATA[
			
				
			
		

SQLiteの起動、データベースの選択/作成
sqlite DB_NAME
DB_NAMEは実際のファイル名と同じです。例えば：
sqlite db/development.sqlite3
テーブル一覧
.tables
.ta
テーブルスキーマを見る
.schema TABLE_NAME
ヘルプ
.help
シェルモードを終了
.quit
.exit
詳しくはCommand Line Shell For SQLiteを参照してください。

]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.kinopyo.com%2Fblog%2Fsqlite-common-comman"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.kinopyo.com%2Fblog%2Fsqlite-common-comman&amp;source=fantasyday&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<div class="section">
<h4 id="id_d41d8cd98f00b204e9800998ecf8427e_header_0">SQLiteの起動、データベースの選択/作成</h4>
<p>sqlite DB_NAME</p>
<p>DB_NAMEは実際のファイル名と同じです。例えば：</p>
<p>sqlite db/development.sqlite3</p>
<h4 id="id_d41d8cd98f00b204e9800998ecf8427e_header_1">テーブル一覧</h4>
<p>.tables</p>
<p>.ta</p>
<h4 id="id_d41d8cd98f00b204e9800998ecf8427e_header_2">テーブルスキーマを見る</h4>
<p>.schema TABLE_NAME</p>
<h4 id="id_d41d8cd98f00b204e9800998ecf8427e_header_3">ヘルプ</h4>
<p>.help</p>
<h4 id="id_d41d8cd98f00b204e9800998ecf8427e_header_4">シェルモードを終了</h4>
<p>.quit</p>
<p>.exit</p>
<p>詳しくは<a href="http://www.sqlite.org/sqlite.html">Command Line Shell For SQLite</a>を参照してください。</p>
</div>
<img src="http://www.kinopyo.com/blog/?ak_action=api_record_view&id=1257&type=feed" alt="" /><img src="http://feeds.feedburner.com/~r/KinopyosBlog/~4/ONUqhqt_8iQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.kinopyo.com/blog/sqlite-common-comman/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.kinopyo.com/blog/sqlite-common-comman</feedburner:origLink></item>
		<item>
		<title>Macで隠しファイルを表示する方法</title>
		<link>http://feedproxy.google.com/~r/KinopyosBlog/~3/9EhKwpx-4KA/view-hidden-files-on-mac</link>
		<comments>http://www.kinopyo.com/blog/view-hidden-files-on-mac#comments</comments>
		<pubDate>Tue, 06 Jul 2010 15:59:02 +0000</pubDate>
		<dc:creator>kinopyo</dc:creator>
				<category><![CDATA[Mac]]></category>

		<guid isPermaLink="false">http://www.kinopyo.com/blog/?p=1249</guid>
		<description><![CDATA[
			
				
			
		

Macではドット&#8221;.&#8221;で始まるファイルやフォルダは隠しフォルダ、ファイルになるようです。
Finderで表示する方法を紹介します。
はるか昔のメモです。。



ターミナルを開く(アプリケーション/ユーティリティ)


下記コマンドを叩いてreturnキーを押して実行


defaults write com.apple.finder AppleShowAllFiles -bool true

killall Finder


ログアウト、あるいはkillall Finderで効果が見れます



隠しファイルを非表示にするには
上記と全く同じ手順で、コマンドを書き換えます。

defaults write com.apple.finder AppleShowAllFiles -bool false


]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.kinopyo.com%2Fblog%2Fview-hidden-files-on-mac"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.kinopyo.com%2Fblog%2Fview-hidden-files-on-mac&amp;source=fantasyday&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<div class="section">
<p>Macではドット&#8221;.&#8221;で始まるファイルやフォルダは隠しフォルダ、ファイルになるようです。</p>
<p>Finderで表示する方法を紹介します。</p>
<p>はるか昔のメモです。。</p>
<p></p>
<ol>
<p>
<li>ターミナルを開く(アプリケーション/ユーティリティ)</li>
</p>
<p>
<li>下記コマンドを叩いてreturnキーを押して実行</li>
</p>
<pre class="brush: plain;">
defaults write com.apple.finder AppleShowAllFiles -bool true

killall Finder
</pre>
<p>
<li>ログアウト、あるいはkillall Finderで効果が見れます</li>
</p>
</ol>
<p></p>
<h4 id="id_d41d8cd98f00b204e9800998ecf8427e_header_0">隠しファイルを非表示にするには</h4>
<p>上記と全く同じ手順で、コマンドを書き換えます。</p>
<pre class="brush: plain;">
defaults write com.apple.finder AppleShowAllFiles -bool false
</pre>
</div>
<img src="http://www.kinopyo.com/blog/?ak_action=api_record_view&id=1249&type=feed" alt="" /><img src="http://feeds.feedburner.com/~r/KinopyosBlog/~4/9EhKwpx-4KA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.kinopyo.com/blog/view-hidden-files-on-mac/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.kinopyo.com/blog/view-hidden-files-on-mac</feedburner:origLink></item>
		<item>
		<title>アプリケーションをiPhoneからiTunesに同期する</title>
		<link>http://feedproxy.google.com/~r/KinopyosBlog/~3/CBO2_mmXwnc/sync-iphone-apps-to-itunes</link>
		<comments>http://www.kinopyo.com/blog/sync-iphone-apps-to-itunes#comments</comments>
		<pubDate>Fri, 02 Jul 2010 17:47:57 +0000</pubDate>
		<dc:creator>kinopyo</dc:creator>
				<category><![CDATA[iPhone]]></category>

		<guid isPermaLink="false">http://www.kinopyo.com/blog/?p=1244</guid>
		<description><![CDATA[
			
				
			
		

iPhoneでアプリケーションを購入して普通はそのままiTunesに同期できるはずですが、時々iTunesがやってくれないです。
あるいはiPhoneで一杯アプリを購入したり削除したりして、パソコンのiTunesとの差分が紛らわしくなったこともあります。その場合はiTunesのアプリを一旦全部削除して下記の方法で一気に同期すればOKです。
アプリケーションをiPhoneからiTunesに同期する
iTunesからiPhoneのデバイスを右クリックして、メニューから「Transfer Purchase」を選択

]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.kinopyo.com%2Fblog%2Fsync-iphone-apps-to-itunes"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.kinopyo.com%2Fblog%2Fsync-iphone-apps-to-itunes&amp;source=fantasyday&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<div class="section">
<p>iPhoneでアプリケーションを購入して普通はそのままiTunesに同期できるはずですが、時々iTunesがやってくれないです。</p>
<p>あるいはiPhoneで一杯アプリを購入したり削除したりして、パソコンのiTunesとの差分が紛らわしくなったこともあります。その場合はiTunesのアプリを一旦全部削除して下記の方法で一気に同期すればOKです。</p>
<h4 id="id_d41d8cd98f00b204e9800998ecf8427e_header_0">アプリケーションをiPhoneからiTunesに同期する</h4>
<p>iTunesからiPhoneのデバイスを右クリックして、メニューから「Transfer Purchase」を選択</p>
</div>
<img src="http://www.kinopyo.com/blog/?ak_action=api_record_view&id=1244&type=feed" alt="" /><img src="http://feeds.feedburner.com/~r/KinopyosBlog/~4/CBO2_mmXwnc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.kinopyo.com/blog/sync-iphone-apps-to-itunes/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.kinopyo.com/blog/sync-iphone-apps-to-itunes</feedburner:origLink></item>
		<item>
		<title>iOS4を使えば、iPhoneのメモがGmailと同期できる</title>
		<link>http://feedproxy.google.com/~r/KinopyosBlog/~3/bDvKEbTs--0/save-iphone-notes-calendar-to-gmail-and-google-calenda</link>
		<comments>http://www.kinopyo.com/blog/save-iphone-notes-calendar-to-gmail-and-google-calenda#comments</comments>
		<pubDate>Wed, 23 Jun 2010 16:19:35 +0000</pubDate>
		<dc:creator>kinopyo</dc:creator>
				<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Gmail]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[iOS4]]></category>

		<guid isPermaLink="false">http://www.kinopyo.com/blog/?p=1215</guid>
		<description><![CDATA[
			
				
			
		

iOS4をインストールできたら、メールアカウントの設定画面をチェックしてみてください。
「メモ（Notes）」という項目が追加されているはずです。
この項目を「オン」にすればOK。
メモは、Gmail上で「Notes」というラベルがつけられています。
ちなみにカレンダーもGoogleに同期できます。





http://www.lifehacker.jp/2010/06/100623iphonenotes_sync.html

]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.kinopyo.com%2Fblog%2Fsave-iphone-notes-calendar-to-gmail-and-google-calenda"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.kinopyo.com%2Fblog%2Fsave-iphone-notes-calendar-to-gmail-and-google-calenda&amp;source=fantasyday&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<div class="section">
<p>iOS4をインストールできたら、メールアカウントの設定画面をチェックしてみてください。</p>
<p>「メモ（Notes）」という項目が追加されているはずです。</p>
<p>この項目を「オン」にすればOK。</p>
<p>メモは、Gmail上で「Notes」というラベルがつけられています。</p>
<p>ちなみにカレンダーもGoogleに同期できます。</p>
<p><a href="http://www.kinopyo.com/blog/wp-content/uploads/2010/06/iphone-notes.png" rel="lightbox[pics1215]" title="iphone-notes"><img src="http://www.kinopyo.com/blog/wp-content/uploads/2010/06/iphone-notes.png" alt="iphone-notes" width="318" height="303" class="attachment wp-att-1218 " /></a></p>
<p><a href="http://www.kinopyo.com/blog/wp-content/uploads/2010/06/iphone-notes-2.png" rel="lightbox[pics1215]" title="iphone-notes-2"><img src="http://www.kinopyo.com/blog/wp-content/uploads/2010/06/iphone-notes-2.png" alt="iphone-notes-2" width="320" height="480" class="attachment wp-att-1219 " /></a></p>
<p></p>
<p><a href="http://www.kinopyo.com/blog/wp-content/uploads/2010/06/iphone-notes-4.png" rel="lightbox[pics1215]" title="iphone-notes-4"><img src="http://www.kinopyo.com/blog/wp-content/uploads/2010/06/iphone-notes-4.png" alt="iphone-notes-4" width="319" height="319" class="attachment wp-att-1222 " /></a></p>
<p><a href="http://www.kinopyo.com/blog/wp-content/uploads/2010/06/iphone-notes-3.png" rel="lightbox[pics1215]" title="iphone-notes-3"><img src="http://www.kinopyo.com/blog/wp-content/uploads/2010/06/iphone-notes-3.png" alt="iphone-notes-3" width="450" height="129" class="attachment wp-att-1221 " /></a></p>
<p><a href="http://www.lifehacker.jp/2010/06/100623iphonenotes_sync.html">http://www.lifehacker.jp/2010/06/100623iphonenotes_sync.html</a></p>
</div>
<img src="http://www.kinopyo.com/blog/?ak_action=api_record_view&id=1215&type=feed" alt="" /><img src="http://feeds.feedburner.com/~r/KinopyosBlog/~4/bDvKEbTs--0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.kinopyo.com/blog/save-iphone-notes-calendar-to-gmail-and-google-calenda/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.kinopyo.com/blog/save-iphone-notes-calendar-to-gmail-and-google-calenda</feedburner:origLink></item>
	</channel>
</rss>
