月別アーカイブ: 2013年1月

Rails 3.2 partialに関数を渡し、処理してもらう。

繰り返しが必要な部分をpartialにしてしまいたくなるときがあると思います。

<% @products.each do | product | %>
<%= render ‘product’ %>
<% end %>

こうすると partialをproducts分だけ読み込むので、処理が遅くなるときがあります。
ですからこのようなループはpartialの中に入れてしまい、元の配列を渡すようにしています。

<%= render ‘products’ , products: @products %>

そしてpartialの内部で

<% products.each do |product| %>

<% end %>

こうすればpartialの中でループが行われるので、呼び出されるのは一度だけです。
ところがこのループの中で、それぞれのproductに対し処理を入れたいときがあります。

例えば管理者用の製品一覧画面と、ユーザー用の製品一覧画面があったとします。
管理者用の画面にはすべての製品を表示し、
ユーザー用の製品一覧画面にはプロダクトオブジェクトに公開のフラグが立っているもののみを表示したいとします。
※そもそもこの場合はコントローラー+モデルで配列自体を変更すると思いますが、あくまで例です。。

その場合、lambdaを利用してpartialに匿名関数を変数として渡す方法があります。

■管理者用のpartial呼び出し

<%= render ‘products’, products: @products,
lambda_publish: lambda{| product | true }
%>

■ユーザー用
<%= render ‘products’, products: @products,
lambda_publish: lambda{| product | product.publish?}
%>

■partial側

<% products.each do |product| %>
<% if lambda_publish.call(product) %>
..
<% end %>
<% end %>

この方法のメリットとしては、partial側を簡潔にすることができる点にあります。

他にヘルパーを使うことが一般的だと思いますが、そうするとcase-when文が登場したりしてヘルパーが太っていきます。

javascriptでよく関数を引数に渡すことがあると思いますが、それと似たような感じで使えるのでとても重宝しています。

 

Facebookページとは?を説明するときに自分なりの回答を考えてみた。

■このような記事を書いた経緯

時々、あまりインターネットに触れる機会のない人にプライベートでも仕事でも出会います。
そして、私がインターネット屋さんだと知るとFacebookって何?とよく聞かれます。
都度、うまく回答できないので一度自分なりの説明を書こうと思ったわけです。いまさらですが。

■Facebookページとは

まずFacebookから説明します。
※わかりやすさを重視しておりますので厳密に正しいかはご容赦ください。
FacebookとはSNSというサービスのひとつです。
SNSというのはユーザー登録をしたもの同士が
さまざまなコミュニケーションを取れるインターネット上のサービスになります。

具体的にどのようなことをするのかというと
日記のようなものを書くことになります。
日記というとある程度長い文章を想像しますが、たいていは短いコメントのようなものになります。

それらを書いているだけでではただの日記ですが、
友達※1の書いたものが
※1:「友達になろう」→「いいですよ」としたユーザー同士です。実際の友達とは意味がちょっと違います。
自分のページに表示されますので、
友達が書いていることを見ることができます。
それに対しコメントを書いたり「いいね」ボタンを押したりすることで、
「この人がコメントしましたよ」とか「いいねと言ってますよ」と通知されます。

そうやって日常思っていることを公開・共有することで、
思いがけないところからの反応があり、コミュニケーションを増大させます。
この増大は楽しいものです。煩わしくて嫌いな人もいるかもしれません。

よく企業ホームページなどで「いいね」と書かれたボタンを見ることがあると思いますが、
あれをFacebookにログインした状態で押すと、
自分がそのページを「いいね」と言っているという内容の投稿をすることになり、
友達にそれを伝えることになります。

つまり「いいね」と言うと同時に「(友達に)いいですよ」といっていることになります。
企業側から見るとそれはよい広告になるわけです。

さてFacebookページですが、これはFacebook上に作られるページです。
個人ユーザーになるとその人のホームページのようなページが作られるのですが、
それの企業や団体などの「人でない者」版であると思ってください。
一見するとそのページは(Facebook上での)企業ホームページのようにも見せることができます。

機能としては個人のものとそれほど変わらないのですが、
Facebookページ自体にはユーザーが「いいね」 をすることができます。

「いいね」をしたユーザーに対し(友達とは別に)更新情報を通知することができるわけです、
つまりFacobookページに「いいね」をするということは、
「(友達に)いいですよ」といっていると同時に
「更新情報を見たいですよ」といっていることになります。