2011-10-09 Rails走り書き
整理されていない走り書きメモ
devise入れたら
rails g devise:install rails g devise user
modelとmigrationを好きなだけゴニョゴニョする。
rake db:migrate rails g devise:views users
"config/initializers/devise.rb"に"config.scoped_views = true"ってしとく。
xhrリクエストでauthenticate_user!とかされても当然リダイレクトしないので、application_controllerとかメソッド作ってリダイレクトさせる。
kaminari入れたら
rails g kaminari:config rails g kaminari:views default
acts-as-taggable-on入れたら
rails g acts_as_taggable_on:migration rake db:migrate
タグ付けするモデルに(:タグ名複数形で)
acts_as_taggable_on :tags
キャッシュするならフィールド追加(cached_タグ名単数形_list:string)
rails g migration add_column_to_tables cached_tag_list:string
rake db:migrate
typus入れたら
rails g typus
スマホサイトのおやくそく
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=0.6667, user-scalable=no"> <meta name="apple-mobile-web-app-capable" content="yes"> <meta name="format-detection" content="telephone=no">
レイアウトで切り替えるヘッダー
PCサイト用
<link rel="stylesheet" href="http://twitter.github.com/bootstrap/1.3.0/bootstrap.min.css">
スマホ用
<link rel="stylesheet" href="http://code.jquery.com/mobile/1.0b3/jquery.mobile-1.0b3.min.css" /> <script src="http://code.jquery.com/mobile/1.0b3/jquery.mobile-1.0b3.min.js"></script>
useful ヘルパー
strip_tags(STRING)・・・・・・・・・・htmlタグを除去する。 simple_format(STRING)・・・・・・・<p>~</p>で囲んで、安全なhtmlタグも使える。 STRING.html_safe・・・・・・・・・・・・そのまま安全なhtmlタグも使える。
useful アクティブレコード・配列
Array.find・・・・・・・・・・・・・・・・・・・・ブロックの結果がtrueを返すときその値を返す Array.select・・・・・・・・・・・・・・・・・ブロックの結果がtrueを返すものの配列を返す
useful モデル
検索はスコープで
scope :search_title, lambda {|keyword| where('title like ?', "%#{keyword}%")}
def previous_record
self.class.unscoped.where('created_at < ?', self.created_at).order(:created_at).last
end
def next_record
self.class.unscoped.where('created_at > ?', self.created_at).order(:created_at).first
end
2011-10-08 Railsでスマホサイトを作ってみたのでメモ
Railsでスマホサイト。ぬー。
はじめに
業務でなんかスマホ用Webアプリ作ることになって、まだまだ試行錯誤中。いちおう形はできたものの、自分のスキル不足を実感している今日この頃です。
Rails3.1とjQuery Mobileで作ることにしてみたけど、いろいろ分かってきたのでメモ。
jQueryMobileはすごい。けどイヤだ。
jsとcssさえ読み込んでしまえば、ほとんど特別なことをしなくても、綺麗に最適化されたデザイン、アニメーションが利用できてサクサク作れる。ただ、いろんなとこで言われてるけど、POSTメソッドとかで勝手にAjaxになる上、適当にリダイレクトしてしまうのがヤな感じ。
そのリンクやフォームだけAjaxを無効にするには、以下の属性をタグに追加する。
'data-ajax' = 'false'
で、これはこれで解決できるんだけど、paypalへのリダイレクトで止められたときには、これだけじゃどうしようもなかった。どうもpaypalに限らず、外部のサイトへのリダイレクトはGETメソッドじゃないとだめっぽい(違うかも)。なので、routes.rbで泣く泣くGETでアクセスするようにした。RESTじゃないなーと思うけど、なんか解決方法があるのかも。
あと、DOMいじったときのスタイルを適用する方法でいくらか時間がかかった。
まとめてたサイトがあった気がするので、またあとで追記する。
とりあえず今のところの感想というか。
正直、すごい楽だった。もー、仕様変更多すぎてウワーってなってたけど、デザインとかCSSとかに悩まなくていいのは気分的にすごい楽。引き継ぎとか考えたら、資料が多くてメジャーなやつ使うのがお互いにいいよねー。
デザインについてはTwitterのBootstrapの方が好みなんだけど、記述量が多い気がするので、ぐうたらな僕にはちょっとしんどい。スマホ用はあるのかな?自分でやればいいんだろうけど。
どうせならpjaxまで・・と思ってたらRails3.2で〜なんて話らしいので、ほっとこうと思う。
なんかCoffeeScript勉強してたハズだったのに、ここんとこご無沙汰でもうほとんど忘れてしまってる・・・。
いいのか、悪いのか、よく分からないまま進んでる感じがすごく気持ち悪い。
なんかまた個人的に作るかなー。
2011-09-12 acts_as_taggable_on が便利すぎて鼻血でそうです。
Railsで、てっとりばやくアンケートフォームをつくる
「販売計画.heroku.com」に、アンケートフォームを追加してみた。
選択肢を用意して〜とかってときに、acts_as_taggable_onでうまいこといったのでメモ。
acts_as_taggable_on については前記事に。キャッシュの付け方も追記した。
はじめに
アンケート用のモデルを作る。めんどいからscaffoldで。
選択項目はacts_as_taggable_onに丸投げするので、そのキャッシュフィールドと記入項目を。
ただし、選択肢を作るためのテンプレ用レコードを確保するので、そのフラグもつけとく。
あとは必要であればメアドとか、名前欄とかも入れる。
rails g scaffold questionnaire cached_satisfaction_list:string cached_trigger_list:string body:text template:boolean
questionnaireモデルに追記する。
選択項目を作っていく。ここでは、2つ項目をつけてみた。
class Questionnaire < ActiveRecord::Base acts_as_taggable_on :satisfactions, :triggers end
コントローラでの処理
挙動をどうするかで10分くらい悩んだ。が、newとcreate以外は認証ではじくようにして、
edit時にテンプレを編集するようにした。create時にはテンプレのリスト内のものだけしか
入らないようにゴニョゴニョする。modelでやろうとしたけどタイミング的にできないっぽい。
ビューの書き換え
フォームについては、newのときとeditのときとで選択肢の表示方法を変える必要がある。
_form.html.erbの一部
<div class="field">
<p>このサイトの評価をお願いします</p>
<% Questionnaire.satisfaction_counts.order(:name).each do |tag| %>
<label>
<%= f.radio_button :satisfaction_list, tag %> <%= tag %>
</label>
<% end %>
<% if action_name == 'edit' %>
<%= f.text_field :satisfaction_list %>
<% end %>
</div>
なんかこれダサイ。
おわりー
要するに、tag_list的な感じで選択項目を増やすのが楽ちんですよということです。
ラジオボタンもチェックボックスもセレクトボックスでもどうにでもなるのが素敵なかんじ。
〜〜 2011-09-17 ビューを手直しした。〜〜
チェックボックスとかのラベルは、「labelタグ」で囲んでしまえばいいということを今さら知ったので書き換えた。IE6とかもう知らんです。
2011-08-22 Railsで帳票フォームのやり方が・・・
Rails 3.1 で帳票フォームをつくるー
はじめに
親子関係のある帳票フォームは「accepts_nested_attributes_for」なかんじで比較的簡単だったので、調子にのって親子関係のないマスタ系の帳票フォームを作ったらハマったのでメモ。
ちなみにこれは 「 販売計画.heroku.com 」 で実装して、後にAjax化した。
なので危険なとこがあったら、教えてください。
モットーは 「 コードをできるだけ書かない 」
参考
http://d.hatena.ne.jp/toshifusa1423/20100524/1274688123
http://www.atmarkit.co.jp/fcoding/rails/articles/rails3/04/rails304b.html
準備
おなじみのscaffoldで以下の内容を。
rails g scaffold product name:string price:decimal stock:integer
マスタ系の帳票フォーム(ふつうの)
とりあえず、追加と削除は後回しで更新のみできるフォームを作る。
帳票フォームと一括更新用のルーティングを追加
config/routes.rb
resources :products do get :edits, :on => :collection put :updates, :on => :collection end
メソッド追加
app/controllers/products_controller.rb
def edits
@products = Product.all
end
def updates
@products = Product.all
respond_to do |format|
if Product.update(params[:product].keys, params[:product].values)
format.html { redirect_to products_url, :notice => 'Product was successfully updated.' }
format.json { head :ok }
else
format.html { render :action => "edits" }
format.json { render :json => @products.errors, :status => :unprocessable_entity }
end
end
end
ビュー追加
app/views/products/edits.html.erb
<h1>Edits products</h1>
<%= form_tag({:action => :updates}, {:method => :put}) do %>
<table>
<tbody>
<tr>
<th>Name</th>
<th>Price</th>
<th>Stock</th>
</tr>
<% for @product in @products %>
<tr>
<td><%= text_field 'product[]', :name %></td>
<td><%= text_field 'product[]', :price %></td>
<td><%= text_field 'product[]', :stock %></td>
</tr>
<% end %>
</tbody>
<tfoot>
<tr>
<td colspan='4'><%= submit_tag %></td>
</tr>
</tfoot>
</table>
<% end %>
<br />
<%= link_to 'Back', products_path %><br>
まとめ
「 form_tag 」 の書き方忘れてハマった。中カッコ必須。
なんか変な書き方っぽいけど、どうなんだろ。
〜〜form_tagが変な位置だったので修正。あとインデントも〜〜
〜〜いらんとこ削った〜〜
〜〜Ruby1.9.2に対応〜〜
2011-08-20 Rails3.1とかCoffeeScriptとか
にゃー。Rails 3.1 rc5 と heroku でサイト作った
Rails3.1, CoffeeScript | |
![]()
オマージュですよ。劣化版の。
怒られたら消ス。もしくは俺が消サレル。
https://hanbaikeikaku.heroku.com/
Railsおもすれー。
CoffeeScriptおもすれー。


